C#复习(三)构造函数、this关键字、静态变量


  再上半天班就清明放假啦,最近收获还是颇大的,每天除了工作,剩下的时间过得还算充实——复习C#、跑步、学习英语。今天开始复习C#面向对象。
  • 面向对象语言:C#、C++、Java
  • 面向过程语言:C
  • 面向对象是面向过程里程碑式的升级。
一、成员变量和局部变量
  1. 类中的变量为成员变量或者实例变量(不包括静态变量,即类变量),成员变量可以不初始化,默认情况下,int变量为0,string变量为null。
  2. 方法中的变量为局部变量,该值必须初始化。
二、构造函数:给对象进行初始化
  1. 格式:函数名等于类名、没有返回值
  2. 构造函数和一般函数的异同:a.构造函数必须没有返回值,名字必须与类名相同;一般函数可以有返回值,函数名不可以与类名相同。b.构造函数在创建对象时会直接调用,给对象进行初始化,只能调用一次;一般函数在需要使用这个函数时才会被调用,可以被调用多次。c.构造函数可以调用一般函,反之不可。d.都可以有重载。e.都可以用return关键字。
  3. 构造函数不能被继承 :创建子类对象时会调用父类的空构造函数,因为子类会继承父类的内容,要先初始化父类后才能使用父类里面的内容。
三、匿名对象:当对象里的成员仅需调用一次时可以使用匿名对象。
   new Car().name="";   
   new Car().color=Color.blue;//两次匿名,两次对象
四、this关键字
  1. this代表其所在函数所属对象的引用;换言之,this代表本类对象的引用。
  2. this可以用来区分局部变量和成员变量的重名。
  3. 可以使用this进行构造函数之间的调用,this()代表引用无参构造函数。
   public DrawLine()
    {
        print("无参构造");
    }
    public DrawLine(int i):this()
    {
        print(i + "含参构造函数");
    }
五、static
  1. static是一个修饰符,修饰成员(变量、方法、属性、构造函数)。
  2. static修饰的成员被所有对象共享。
  3. static修饰的成员优先于对象存在(随着类的加载而存在)。
  4. static修饰的成员只有一种调用方式:类名.静态成员。
  5. static修饰的是共享数据,而对象中的为特有数据;共享数据只占一份内存。
六、成员变量和静态变量的区别?
   a.生命周期不同
     成员变量随着对象的创建而存在,随着对象的回收而释放
     静态变量随着类的加载而存在,随着类的消失而消失。生命周期更长。
   b.调用方式不同
     成员变量只能被对象调用
     静态变量只能被类名调用
   c.别名不同
     成员变量又叫实例变量
     静态变量又叫类变量
   d.数据的存储位置不同
     成员变量存储在堆内存中
     静态变量存储在数据共享区
七、什么时候使用静态?
  1. 静态变量。如果有数据需要共享,就把数据修饰成static。
  2. 静态函数。看这个方法中是否需要访问非静态的数据,如果需要访问,那么方法一定不是静态的; 如果不需要则可以修饰成静态。
  3.  修饰成静态的方法可以直接被类名调用不需要创建对象,十分方便。
八、static的局限性
  1. 静态的只能访问静态的,而非静态的都可以访问。
  2. 静态方法中不能使用this,base。
  3. VS中主函数是静态的。
九、继承:为多态提供了前提
  1. 继承的好处:提高代码的复用性;让类与类之间产生了关系。
  2. C#不支持多重继承,但支持多层继承;
  3. 千万不要为了提高代码的复用性而去使用继承;
  4. 子父类中可以存在相同名称的变量与方法,此时父类中的也会被继承,只是会隐藏。 一般情况下,子类中的变量或方法用new修饰。 对于相同名称的方法,我们一般用virtual修饰父类方法、override修饰子类方法,也就是重写、覆盖。
  5. overload和override的区别?
   overload(重载)出现在同一个类中,并且是同名函数,参数不同
   override(重写)是出现在子父类当中,并且是同名函数,参数也一样(声明一样)
十、base关键字:代表父类对象
   class A
   {
      public int num = 3;
      public virtual void Show()
      {
         System.Console.WriteLine("ShowA");
      }
   }
   class B : A
   {
      public new int num = 4;
      public override void Show()
      {
          base.Show();//调用父类原有功能
          System.Console.WriteLine(base.num); //3
      }
   }
   子类中构造函数默认都会访问父类中无参构造函数,因为每一个构造函数都有一个默认的关键字base。
   public class DrawLine : Object 
   {
        public DrawLine():base()
       { 

       }
   }
十一、sealed
  1. sealed表示密封,不被继承,可修饰类(一般为子类)和方法、属性。
  2. sealed修饰的方法不可以被覆盖,当sealed修饰方法、属性的时候,必须要与override关键字一起用(合着只能修饰子类的方法、属性了)。







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值