• C#字段和属性,索引器的区别


    一、c#字段和属性的区别与介绍(转自https://blog.csdn.net/qq_39038038/article/details/80889017)

    字段:
    
    访问权限   值类型  字段名 
    
    例如:private int number;
    
    属性:
    
    public int Number{
    
        get{
    
             return this.number;
    
        }
    
        set{
    
            this.number = value;
    
        }
    
    }
    
    字段和属性的区别。
    
    例子说明:
    
                如果我们有一个公有字段 如成绩的分数(public int score; ),我们可以在类的外部,访问,修改字段。但是假如我们给分数 赋值,score = 10000;编译不会报错,但是不符合常理。
    
                这里我们就需要使用属性来限制 对字段提供一些安全保护  。
    
    
    private int score;
     
            public int Score
            {
                get { return score; }
                set {
                    if (value >= 0 && value <= 100)
                    {
                        score = value;
                    }
                    else
                    {
                        throw new Exception("score value has error.");
                    }
                }
    
    总结:属性里的get,set访问器可以对字段提供一些安全保护了。属性对外:暴露数据,数据可以是存储在字段里的,也可以是动态计算出来的。对内:保护字段不受“非法值”污染。一般情况下,它们都用于表示实体(对象或类型)的状态。属性大多数情况下是字段的包装器(wrapper)。建议:永远使用属性(而不是字段)来暴露数据,即字段永远是private或protected的
    

    二、C#中的字段与属性的区别及属性的作用

    public class Employee
    {
        //字段
        private string name;
        //属性
        public string Name      
        {
            get { return name; }
            set { name = value; }
        }
    }
    

    这段代码中声明了name字段和Name属性,一般来说属性名是变量名的首字母大写
    属性的作用是对字段进行赋值时加以限制,因本段代码字段是姓名所以没有限制,下面附一段对年龄赋值加以限制的代码

    public class Employee
    {
        //字段
        private byte age;
        //属性
        public byte Age      
        {
            get { return age; }
            set {
                if(value >= 18 && value<=60)
                    age = value;
            }
        }
    }
    

    这段代码对age进行了限制,通过Age属性对age字段赋值,其值只能在18~60才能赋值成功

    下面再贴一段调用代码

    class TestEmployee
    {
        static void Main()
        {
            Employee.NumberOfEmployees = 107;
            Employee e1 = new Employee();
            //错误,name字段为private私有字段
            e1.name = "Claude Vige";
            //正确,Name属性通过set方法对name字段赋值
            e1.Name = "Claude Vige";
            //打印输出e1的姓名,通过Name属性的get方法返回name的值
            System.Console.WriteLine("Employee name: {0}", e1.Name);
        }
    }
    

    三、C#中的索引器

  • 相关阅读:
    【转】在Ubuntu上下载、编译和安装Android最新源代码
    【转】Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程
    linux kernel API and google android compile guide
    【转】如何单独编译Android源代码中的模块--不错
    【转】Android源代码编译命令m/mm/mmm/make分析--不错
    【转】linux设备驱动之MMC SD卡——核心层简单分析
    DELL笔记本拆机添加内存条
    【转】windows7 64位系统认不出8g内存显示只有3G可用
    matlab 神经网络工具箱的实用
    学习算法收敛条件的判断
  • 原文地址:https://www.cnblogs.com/newcapecjmc/p/12716085.html
Copyright © 2020-2023  润新知