黑马程序员_学习日记2_有关C#基础知识总结归纳之对象和类型

时间:2022-08-16 00:27:05
---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

学习笔记二:对类的一些更深入的研究.

 我们都知道 类 是创建一类对象的模板,类中有数据成员和函数成员

数据成员包括:字段,常量,事件。

函数成员包括:方法,属性,构造函数,析构函数,索引器和运算符(operator)

 

下面我就来具体深入的研究一下函数成员中的各个成员。

 

方法:

方法的申明:在C#中,方法的定义包括任意的访问修饰符,返回值类型,方法名和方法的参数列表。

[modifiers] return_type MothodName([parameters])

{

    //......

}

其中 []表明的地方 可写可不写。

方法分实例方法和静态方法。C#中,方法默认是实例的,除非在方法修饰符后面(返回类型前面)加上一个static关键字来使该方法和该类关联而不是和类的实例关联。

方法的调用:C#中,每一个方法都不是独立存在的,它要么是实例关联,要么和类关联,所以方法的调用就分两种,实例对象调用 或者类调用。

 

给方法传递参数:ref  将值类型参数强制转化为引用类型,out 传递给方法的参数 可以不需要进行初始化。

 

方法的重载:方法名相同,返回类型相同,参数列表不同的方法之间就可以叫做方法的重载。

 

属性:

属性(property):它是一对方法或者是一个方法,但是它在客户端看来 就象是一个字段。

public string SomeProperty

{

      get{return someproperty;}

     set{someproperty = value;}

}

get访问器不带任何参数,且必须返回属性申明的类型。同样的set也不带任何参数类型。但它的类型直接和你所绑定的字段类型相同。

 

 

构造函数:

构造函数是一个没有返回类型,方法名和类型相同的一个方法。它是在实例化对象的时候由.NET自动调用的。它存在的目的是为了初始化实例成员的字段值。

在没有特殊要求的情况下,我们不必显式的在类中定义构造函数,因为C#编译器会在后台默认的给我们提供一个不带参数的构造函数。不带参数的构造函数的

作用就是给对象的字段赋系统自带的默认值。比如int 赋0,引用赋null ,bool 赋false。

但是,如果我们显式的定义了带参数的构造函数,那么编译器就不会给我们默认提供一个不带参数的构造函数了(如果有继承链的话,编译器的这种做法有可能会影响到当前类是否能顺利完成实例化。)

构造函数也是方法,所以它也有静态的。

构造函数是你实例化一次对象的时候,它就执行一次。而静态构造函数则是在加载当前类的时候执行一次。

编写静态构造函数的一个原因是,在第一次使用该类是,需要冲外部源中初始化类的某些静态字段和属性。

.NET运行库不能确定什么时候会调用静态构造函数,也不能确定多个类中的静态构造函数会按什么顺序执行。所以静态构造函数中,不能放一些具有依赖性的数据。

构造函数 没有访问修饰符。它不由我们程序员调用,而是.NET运行库。所有静态构造函数也没有访问修饰符。既然它不为我们程序员所用,所以参数对静态构造函数来说,也没有什么意义。所有静态构造函数也不能带参数。

下面来总结一下静态构造函数的特点:

1:一个类中只能有一个静态构造函数

2:静态构造函数不带访问修饰符(原因第三点)

3:静态构造函数由.NET运行库在加载当前类时调用。

4:静态构造函数只执行一次,构造函数则是实例化一次对象就执行一次。(这里要区别静态构造函数的一次和构造函数一次的区别)

5:静态构造函数没有参数列表(原因第三点)。

6:静态构造函数的执行顺序有.NET来确定,具有不确定性,多个类中的静态构造函数的执行顺序具有不确定性,所以尽量不要把具有依赖性的数据放在静态构造函数里。

7:一个类中可以同事定义构造函数和静态构造函数,它们之间没有冲突,没有联系。

 

析构函数:

 当.NET运行库检测到某个对象将不会在使用的时候,就会调用析构函数。它的何时调用 不是我们程序员能控制的,所以也具有不确定性。

可以再析构函数中做一些 释放资源等操作。

析构函数的申明语法为:

 ~ 类名()

{

    //dosomething here.

}

 

 

索引器:

    对象如果有数组类型的字段,就可以使用索引器对其进行索引。

 public class Student

{

      public string[] studenthobbits ={"跳舞","唱歌".....};

}

Student s = new Student();

s.studenthobbits[0]======>跳舞.

 

运算符:(operator)

       运算符;可以使用+,-,*,/的表现模式来使两个对象之间进行数学运算。而并非以前的ADD SUM等方法的定义。

比如我要定义一个两个同学年龄相加的方法。

传统方式:

pubilc int SumAge(student s1,student s2)

{

        return s1.age+s2.age;

}

调用方法.  S.SumAge(s1,s2);

 

运算符的方式:

public static int operator +(student s1,student  s2)

{

     return s1.age+s2.age;

}

调用方法:s1+s2即可。

比传统的方式更加直观。

C#规定 类的运算符必须申明为public 和 static 。

 

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
详细请查看: http://net.itheima.com/