zoukankan      html  css  js  c++  java
  • 深入理解C#中this/partial/null的使用

    一、this关键字作用

    1、this表示当前运行中的对象

    Eg:

    public class Person
    
    {
    
      public int age;
    
      public string name;
    
      public Person(int age,string name)
    
      {
    
         this.age=age;//把传递进来的12赋值给当前运行在内存中的对象的age属性,下同
    
         this.name=name;
         
         Console.WriteLine("两个参数的构造函数被调用了");
    
    
      }
    
      static void Main(string[] args)
    
      {
    
         Person p=new Person(12,"Lucy");
    
      }
    
    }
    View Code

     2、调用其他的构造函数

    如上例再加上:

    public Person(int age)
    
    {
    
      this.age=age;
    
      Console.WriteLine("只有一个参数,并且参数类型是int类型的构造函数被调用了");
    
    }
    
    //this调用
    
    public Person(int age,string name):this(age)
    
    { //this.age=age; this.name=name;
    
         
         Console.WriteLine("两个参数的构造函数被调用了");
    }
    //调用
    
     static void Main(string[] args)
    
      {
         Person p=new Person(12,"Lucy");//先调用两个参数的构造函数,再调用一个参数的构造函数,再执行一个参数的构造函数,在执行两个参数的构造函数
      }
    View Code

     二、部分类

    1、必须在同一个命名空间中,类的名字要一致,被partial修饰的类叫做部分类,或伙伴类。

    2、C#编译器在编译伙伴类的时候会编译成1一个类,所以在另外1个伙伴类中定义的变量可以在这个伙伴类中方法。

    3、作用是分开管理,便于维护。

    partial class Program
    
    {
    
        int num;
    
    }
    
    partial class Program
    
    {
    
       public void Test()
    
       {
    
             this.num=12;
    
       }
    
    }
    View Code

     三、理解null

    1、局部变量的值类型存在栈里面,引用类型存在堆里面。成员字段,不管是引用类型还是值类型都是存在堆里面对象里面。

    2、理解一下代码

    public class Person
    
    {
       string name;
    
       public Dog dog=new Dog();
    
    }
    
    public class Dog
    
    {
    
       public void Shot()
    
       {
    
        Console.WriteLine("旺旺");
    
       }
    
    }
    
    static void Main(string[] args)
    
    {
    
       Person d=new Person();
    
       d.dog.Shot();
    
    }
    View Code

    3、只有引用类型的变量的值才能为null,值类型不能,引用类型的变量的值为null,就代表变量不指向空间中任何对象。

    Person p=null;
    
    Person.name="jack";//p变量没有指向任何对象,所以不能成功赋值,这时候会报“未将对象引用设置到对象的实例”

    声明:以上内容均属软谋原创,如需转载,请注明出处。

  • 相关阅读:
    反转链表 16
    CodeForces 701A Cards
    hdu 1087 Super Jumping! Jumping! Jumping!(动态规划)
    hdu 1241 Oil Deposits(水一发,自我的DFS)
    CodeForces 703B(容斥定理)
    poj 1067 取石子游戏(威佐夫博奕(Wythoff Game))
    ACM 马拦过河卒(动态规划)
    hdu 1005 Number Sequence
    51nod 1170 1770 数数字(数学技巧)
    hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)
  • 原文地址:https://www.cnblogs.com/ruanmou001/p/3310909.html
Copyright © 2011-2022 走看看