C#中的面向对象编程: 类和对象

  1. 类和对象的关联:

    • 类是对同具有相同属性或功能的事物进行逻辑上的抽象,而被抽象的具体事物就可以称之为类的对象;
    • 类是抽象的,是一种模型,对象是实实在在的,实例化的特指;
  2. 类的数据成员:

    • 类的数据成员,同一类事物,他们共有的状态或描述,(有什么);
    • 类的函数成员,包括:方法,属性,构造函数,终结器,运算符重载和索引器;
      1. 方法:类的功能函数,简单的说,它就是同一类事物,他们共同的技能,能力(能做什么);
      2. 属性: C#提供了其专用的方法,Set, Get方法;
      3. 构造函数: 每个对象在实例化的时候,自动调用的函数,名字写类名相同,没有返回类型(不是返回类型VOID,请注意),可以重载;
      4. 终结器: 类似C++中的析构函数,在对象不再使用(生命周期结束时),对对象内存的回收前需要处理的动作,名字和类名一致,前面加上~,没有返回类型,不可以重载,一个类只有一个终结器;
      5. 运算符: 类似C++中的运算符重载,即把常用的运算符,让它们在自己定义的类中也可以达到相同或相似的功能,如:+ 实现两个类对象相加;
      6. 索引器:允许对象以数组或集合的方式进行索引;
  3. 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   ^_^  欢迎高手有更好的理解,指导一二,感激不尽,再作修改)
      • 实例代码如下:
        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();
        	}
            }
        }
        输出结果: 100;
    • 命名参数:此功能允许你在调用方法时,不按方法中的形参的顺序来传入形参,直接用命名参数:形参  来进行调用,使用非常灵活;
    • 可选参数:类似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();
        	}
            }
        }
        运行结果如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值