C# 构造方法、this、new、static、实例化、访问修饰符

关于调用变量、方法

  • 在自己的类里面调用自己的变量或方法时,可以直接用变量名或方法名调用。
  • 在自己的类里面调用别的类的变量或方法时,该变量为static时,可以用类名.变量名调用,如果是非static时,用new实例化后调用。
  • 在声明变量(字段)时,需要public、string等修饰符,但后面引用它时,就可以直接不用再写这些修饰符了。

全局变量、局部变量:

  • 比如方法体内{ }的变量是局部变量,只在括号里有效,出了括号无效,括号外的人也没法调用。而且可以与外面的变量名重名,不相干。全局变量就是在类里面,又在方法体外的,这种全局变量谁都能用,在类里面都有效。

实例化与不用实例化使用:

  • 任何一个类,如果要调用里面的变量或方法,都应该先用new实例化(new实例化产生的东西就叫对象),再用实例名.变量名来调用。
  • 实例化后,才能调用其修饰符类型的提供的方法。
  • 但是,static修饰了的方法或变量,不用实例化,直接用类名.方法名调用。
  • 有趣的是,在静态static方法中,你要调用非静态的变量时,要先在静态方法中new实例化,再用实例名.变量名来调用该非静态变量。

static修饰

  • 静态变量(类变量)和非静态变量(实例变量)的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;
  • 在本类里调用static修饰的方法或变量,可以直接用;
  • 在本类外调用static修饰的方法或变量,要类名.方法名,类名.变量名;
  • 静态方法不属于某一实例,而是属于类本身,所以对静态方法不需要创建一个类的实例。所以使用静态方法时,直接通过类名.方法名。
  • 在静态方法里不能直接访问非静态成员,你在方法体里new一个对象后就能访问了。
  • 用实例方法,需要先创建实例,才能调用实例方法,而静态方法则不需要…
    从性能上说,静态方法效率要稍微高一些,但是它会常驻内存…
    一些情况下使用静态方法是有好处的,因为对于静态方法无论你有多少个实例,内存中要维护的一份拷贝。
    一般使用频繁的方法用静态方法,用的少的方法用动态的。静态的速度快,占内存。动态的速度相对慢些,但调用完后,立即释放类,可以节省内存,可以根据自己的需要选择是用动态方法还是静态方法。
   class Program
    {
        static int age = 1;
        int our = 2;
  
        static Program Jim = new Program();

        static void Main(string[] args)
        {
            //Program tt = new Program();

            Console.WriteLine("{0}", Jim.our);
            Console.ReadLine();
        }
    }
  • 上面,当你想在static的Main方法里使用外面的非static的our变量,有两种方法,第一种,在方法外实例化一个static的Jim,然后在Main里面用;第二种,在方法里不用static实例化一个tt,然后使用tt。
  • 当然,如果是要使用外面的static变量,就简单了,直接使用就好。
  • 但是,如果你外面有个Program Jim = new Program();然后静态方法里又有一个Program tt = new Program();那么,运行时会报错。(原因应该是类内不能对本类进行实例化,否则会死循环,所以显示溢出)这就麻烦了,如果类里面有静态方法,是不是外面就不能用new了。一般实例化都在方法里,不在外面实例化,所以应该问题不大。
  • 所以说,静态static方法中,要使用外面的变量,如果是static变量,就可以直接用,如果不是static变量,就一定要在方法内new实例化,再使用。

访问修饰符public、private、protected:

  • public:公有访问,不受任何限制。 (类和类直接可以共享访问)
  • private:私有访问,只限于本类成员访问,任何外部子类、实例都不能访问。(只在自己类里面访问,外部的不管是子类还是想用实例来访问的类都不允许)
  • protected:保护访问,只限于本类和子类访问,实例不能访问。
  • 根据亲疏关系,自己类A最亲,子类B亲一点,其他不相干类C最疏远。所以,public是A/B/C三个人都能访问,protected是A/B可以访问,private是A可以访问。
  • 方法之中的变量只是局部变量,并不能被方法之外所识别,所以并不能使用public,static,private,protected…之内的修饰符。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值