-
类和对象的关联:
-
类是对同具有相同属性或功能的事物进行逻辑上的抽象,而被抽象的具体事物就可以称之为类的对象;
- 类是抽象的,是一种模型,对象是实实在在的,实例化的特指;
-
-
类的数据成员:
- 类的数据成员,同一类事物,他们共有的状态或描述,(有什么);
- 类的函数成员,包括:方法,属性,构造函数,终结器,运算符重载和索引器;
- 方法:类的功能函数,简单的说,它就是同一类事物,他们共同的技能,能力(能做什么);
- 属性: C#提供了其专用的方法,Set, Get方法;
- 构造函数: 每个对象在实例化的时候,自动调用的函数,名字写类名相同,没有返回类型(不是返回类型VOID,请注意),可以重载;
- 终结器: 类似C++中的析构函数,在对象不再使用(生命周期结束时),对对象内存的回收前需要处理的动作,名字和类名一致,前面加上~,没有返回类型,不可以重载,一个类只有一个终结器;
- 运算符: 类似C++中的运算符重载,即把常用的运算符,让它们在自己定义的类中也可以达到相同或相似的功能,如:+ 实现两个类对象相加;
- 索引器:允许对象以数组或集合的方式进行索引;
- C#中方法的扩展:
- 方法中参数的传递:
- 值传递:传递过去的形参只是实参的一个副本,在方法中对形参的值改变,不会影响实参的值;
- 引用传递:传弟过去的形参是实参的引用,也即是别名,他们所关联的是同一个对象实体,改变形参的值即改变实参的值;
- 在C#中,默认对所有函数传参都采用值传递;但由于对引用类型的值传递,传递过去的是引用类型的值的副本,但是它还是关联的相同的一个对象实体,只是相当于多取了一个别名而已,所以对引用类型的传参,通过形参仍然可以修改实参的值,这一点是我们应该着重注意的;
- 当我们需要对一个值类型(value type)进行引用传递时,C#给我们提供了一个ref关键字;在函数的声明和调用时,都需要在变量前加上ref关键字;
- 实例代码如下:
using System; namespace PromgramMemberFunction { class MemberFunction { public static void ModifyValue(int nValue) { nValue = 100; } public static void ModifyValue(ref int nValue) { nValue = 100; } } class MemberFuncDemo { public static void Main() { int value = 0; MemberFunction.ModifyValue(value); Console.WriteLine(value); MemberFunction.ModifyValue(ref value); Console.WriteLine(value); Console.ReadLine(); } } }
- 运行结果: 0 100 (第一次是值传递,在函数中对形参的修改,不会影响实参,第二次是引用传递,所以对形参的修改会直接影响实参;
- out参数: 当一个方法需要对外输出参数时,可以在定义形参的时候前面加上关键字out, 以表示这个参数是用作输出,可以不用对其进行初始化;在调用时,也同样需要在形参前加上out关键字;用out关键字修饰的形参将自动默认会使用引用传递(否则值类型的传递就无法进行作参数传出了,修改的只是一个副本) (个人感觉:在有ref关键字后,out显的有点画蛇添足的感觉,out就是一个不用初始化的ref ^_^ 欢迎高手有更好的理解,指导一二,感激不尽,再作修改)
- 实例代码如下:
输出结果: 100;using System; namespace PromgramMemberFunction { class MemberFunction { public static void OutTestFunc(out int nValue) { nValue = 100; } } class MemberFuncDemo { public static void Main() { int value; MemberFunction.OutTestFunc(out value); Console.WriteLine(value); Console.ReadLine(); } } }
- 实例代码如下:
- 命名参数:此功能允许你在调用方法时,不按方法中的形参的顺序来传入形参,直接用命名参数:形参 来进行调用,使用非常灵活;
- 可选参数:类似C++的默认参数,为方法中的部分参数设置默认值,在调用该方法时,当没有对已设置默认值的形参传参时,将自动以默认值传入方法体中;注意:所有的默认参数,必须在非默认的参数的右边,即不允许在默认参数的右边有非默认参数;
- 示例代码如下:
运行结果如下:using System; namespace PromgramMemberFunction { class MemberFunction { public static void NamedTestFunc(int a, int b =10, int c= 20) { Console.WriteLine("a=" + a + " b=" + b + " c=" + c); } } class MemberFuncDemo { public static void Main() { MemberFunction.NamedTestFunc(a:100); MemberFunction.NamedTestFunc(a:100, c:0); MemberFunction.NamedTestFunc(a:100, b:50); Console.ReadLine(); } } }
- 示例代码如下:
- 方法中参数的传递: