zoukankan      html  css  js  c++  java
  • C#中的字段,属性,常量

    C#中的字段,属性,常量

    字段(field)

    一种表示与对象或类型(类或结构体)关联的变量,旧称成员变量

    (attributes)(field-modifiers) type variable-declarators; //字符声明,括号表示可选
    
    • 实例字段,与对象关联的
    • 静态字段,与类型关联的,由static修饰的字段

    字段修饰符field-modifier

    • public,protected,private

    • new(显式隐藏从基类继承的成员)

    • internal(同一个程序集中可访问)

    • static

    • readonly(只读)

      一旦初始化就无法再赋值

    • volatile(易变的,常用于多线程)

    关于internal: https://www.cnblogs.com/wowoblog/p/6970502.html

    字段初始值

    • 显式初始化(在声明时初始化或使用构造函数)
      • 实例字段(其初始化在创建的时候)
      • 静态字段(其初始化在加载时唯一构造一次,对应静态构造函数)
    • 隐式初始化,字段获得该类型默认值

    属性(property)

    一种用于访问对象或类型的特征的成员,是字段的进化

    C++中用private来封装类中的成员变量,用public定义取值方法和修改方式,以此来保护值不被污染(被赋予超出可能性赋值范围的值)

    class Program
    {
    	static void Main(string[]ages)
    	{
    		People man1=new People();
    		man1.SetAge(1000);
    		Console.WriteLine(man1.GetAge());
    	}
    }
    class People
    {
    	private int age;
    	public int GetAge()
    	{
    		return age;
    	}
    	public int SetAge(int num)
    	{
    		age=num;
    	}
    }
    //Output:man1's age = 1000
    //显然年龄不可能为1000,该年龄为错误值
    

    相同作用但使用属性表示

    private int age
    {
    	get
    	{
         	return age;
         }
         set
         {
         	if(value>0&&value<130)
            {
            	this.age = value;
            }
            else	//若数值错误,则抛出异常
            {
                throw new Exception("error age");
            }
          }
    }
    

    属性一般格式

    private/protected  type variable-declarators
    modifiers type variable-declarators
    {
    	get 
    	{
    		......
    	}
    	set   
    	{
    		......  //临时值value为传入值固定名字
    	}
    }
    

    ​ 在VS里面快捷生成先输入propfull再按两下Tab键即可快捷完整生成一个属性,每按一下Tab键跳转位置,自定义修改该属性,而使用prop然后按下两下Tab键则是快捷简单生成一个属性,此时该简单生成的属性类似于一个字段,如下

    private int myVar;					//propfull
    public int MyProperty
    {
    	get { return myVar; }
    	set { myVar = value; }
    }
    
    public int MyProperty { get; set; }   //prop
    

    ​ VS中还提供了选中变量声明,鼠标右键选中重构,可以帮你封装成属性或者仍用字段

    ​ 而在set和get前添加访问修饰符,能限定外部无法修改或访问该字段;或者删除其中一个,还能限定该字段只读或只写,但一般只会设置只读而不会设置只写

    ​ 总的来说,属性和字段核心作用是一样的,但属性一般算是字段的包装,推荐永远使用属性暴露数据(可以保护字段),将其字段用private或protected封装起来

    常量(constant)

    modifiers const <data_type> <constant_name> = value;
    

    不同只读场景的不同区别

    • 为提高程序执行效率--常量
    • 为防止对象的值被修改--只读字段
    • 为暴露不可修改的数据--只读属性
    • 当希望成为常量的值其类型(类/结构体)不能被常量声明接受时--静态只读字段
  • 相关阅读:
    新学期的合作
    软件工程问题及回答
    《程序猿的生命周期》阅读有感
    《构建之法》13~17章
    阅读《构建之法》十一、十二、十三章之感
    阅读《构建之法》十一、十二、十三章
    【.NET / C#】SubarrayUtils(查找子数组工具类)
    【Java】ComplexTimerTask (TimerTask 拓展封装)
    【Java】AesCbcCodec(AES_CBC加解密工具类)
    【Java】AesEcbCodec(AES_ECB加解密工具类)
  • 原文地址:https://www.cnblogs.com/AMzz/p/12713468.html
Copyright © 2011-2022 走看看