• c#类及其方法和属性关键字权限


    学c#已经大半年了,很多东西是边学边忘,现在回顾总结一下。

    1.首先说关键字static(静态的)

    它可以修饰类、方法、属性、字段

    静态类:不能实例化,直接调用,它的内部成员必须是静态的,不能包含实例构造函数,调用方式是(类名.成员名)

    非静态类下的静态成员:静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量,只能被重载,而不能被重写,因为静态方法不属于类的实例成员,调用时也通过(类名.成员名)方式调用

    使用选择:当定义的类不需要进行实例化时,我们使用静态类;如果需要实例化对象,需要继承等特性时,应该使用非静态类,并且将统一使用的变量和方法设为静态的,那么所有实例对象都能访问。


    (1)静态和非静态的不同的地方,就是静态的从程序一启动就会一直占用内存,而非静态的只在使用后(实例化)后才会占用内存.但是每实例化个一个对象时又会另外占用内存. 举个例子,比如说一个数据库的连接字段(STRING).因为要经常使用到它,这时我们可以用STATIC.但是如果这时用非静态的话那就不合算了,因为每次调用到它时,又实例化一次.这样相比来说占用内存就比较大了.不划算. 像一个登录后台的方法,你只在登陆时候调用一次,就没有必要做成静态的了.那样一直驻存在内存中.在大型项目中,你如果都使用静态的那得要多少内存去支撑呀.嘿嘿 简单点,就是它经常要被调用时,就用静态的.相反则用非静态的

    (2)静态类主要是共享,静态类内部成员必须是静态的。
    静态一般在程序加载的时候被构造。
    我个人用静态类最多的地方的是程序配置部分,因为他的共享特性,在多个窗体中都需要调用,更主要的就是他在程序启动的时候就被初始化了。
    静态类可以有构造函数,但是只被调用一次。
    就上面说的程序配置数据部分,如果使用非静态类,那么你需要在任何有可能访问到他的代码前手动初始化他,并且还要将他赋给一个静态变量后才能使用。
    费事不费事另说,假若你需要在他构造前某个位置来调用它,那还需要修改你构造他的代码的位置。
    非静态类使用完成后系统会自动销毁释放,所以非静态类相对来说比较安全,而静态类是在程序结束后销毁的,在销毁前一直驻留在内存中,因此出现错误的可能性会大些。

    (3)

    • 静态成员在加载类的时候就会被加载, 并通过类进行访问.
    • 非静态成员在对象实例化时被创建, 通过对象来进行访问.

    根据静态和非静态成员创建时的方式不同, 导致一个类的所有实例的同一静态变量的值是同一个. 同一个类的不同实例的同一非静态变量的值可以是不同的值. 所以你在写项目的时候, 是否可以考虑, 如果类的所有实例的一个参数都为同一个值得话, 给弄成static的好一些?

    (4)虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,不属于类的实例。因此,可以同对待静态字段一样使用 ClassName.MemberName 表示法来访问 const 字段,C# 不支持静态局部变量(在方法内部定义静态变量)。

    2.类的权限修饰符:internal(内部的)、public(公共的)

    internal:只能在本程序集(项目)中访问(调用)

    public:可以通过引用库的形式,在其他程序集(项目)中被调用(访问)

    3.类的partial修饰符

    该修饰符只修饰类,代表类的一部分,可以把成员分成多部分在不同的文件中编写,他们最后会合成同一个类,winform的窗口生产代码和逻辑处理代码就是在同一个类下不同文件中

    4.成员的修饰符1:private(私有的)、public(公共的)、internal(内部的)

    private:只能在本类中访问

    public:和类的修饰一样

    internal:和类的修饰一样

    5.成员的修饰2:protected(受保护的)、protected internal

    protected:在本类及其子类中访问

    protected internal:在同一程序集和子类中访问

  • 相关阅读:
    2018年3月20日java
    2018年3月19日Java
    浏览器执行js代码的机制--对于我们深入了解js有很大的帮助,同时面试时候也都能用得到。
    如果用css的border属性画一个三角形
    js事件(event)的运行原理
    如何通过源生js获取一个元素的具体样式值 /* getCss:获取指定元素的具体样式的属性值 curElement:[dom对象] attr:[string] */
    js创建对象的高级模式
    查看release的SHA1
    集成百度地图定位和导航功能时出现包冲突
    【十次方基础教程(后台)】MongoDB相关
  • 原文地址:https://www.cnblogs.com/eve612/p/13957192.html
Copyright © 2020-2023  润新知