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;
    

    不同只读场景的不同区别

    • 为提高程序执行效率--常量
    • 为防止对象的值被修改--只读字段
    • 为暴露不可修改的数据--只读属性
    • 当希望成为常量的值其类型(类/结构体)不能被常量声明接受时--静态只读字段
  • 相关阅读:
    网页加速的14条优化法则 网站开发与优化
    .NET在后置代码中输入JS提示语句(背景不会变白)
    C语言变量声明内存分配
    SQL Server Hosting Toolkit
    An established connection was aborted by the software in your host machine
    C语言程序设计 2009春季考试时间和地点
    C语言程序设计 函数递归调用示例
    让.Net 程序脱离.net framework框架运行
    C语言程序设计 答疑安排(2009春季 110周) 有变动
    软件测试技术,软件项目管理 实验时间安排 2009春季
  • 原文地址:https://www.cnblogs.com/AMzz/p/12713468.html
Copyright © 2011-2022 走看看