c# 属性与字段

字段与属性都是类的成员。
字段是数据成员,是隶属于类的变量。
属性是函数成员,它不为数据存储分配内寸,它执行代码。

当字段为private,可以用属性来读写此字段。
代码如下

  class C1
    {
        private int realValue; //分配内存
        public int RealValue // 不分配内存
        {
          //get访问器必须包含return语句,返回字段‘realValue’
            get 
             { 
               return realValue;
             }
            set //set访问器接受它的输入参数--value,并巴它赋给字段,value是隐式参数。
            {
                realValue = value;
            }
        }
    }
     class Program
    {
        static void Main(string[] args)
        {
            C1 c = new C1();
            Console.WriteLine("realValue:{0}", c.RealValue);//把属性看做一个字段,从中读取它的值。
            c.RealValue = 20; //通过set访问器赋值。
            Console.WriteLine("realValue:{0}", c.RealValue);
            Console.Read();
        }
    }

这里写图片描述

属性也可以设置只读或只写

    {
        private int realValue; //分配内存
        public int RealValue // 不分配内存
        {
            private
            get
            {
                return realValue;
            }
            set//只写,此时set访问器的访问修饰符同属性的访问修饰符一样都为:public;不能同时为set,get访问器添加访问修饰符。
            {
                realValue = value;
            }
        }
    }

或者

class C1
    {
        private int realValue; 
        private int complexValue;
        public int RealValue 
        {
            get //只读
            {
                return realValue;
            }
        }
        public int ComplexValue 
        {
            set  //只写
            {
                complexValue = value;
            }
        }
    }

属性也可以不与字段关联

 class Triangle 
    {
        public double A = 3;
        public double B = 5;
        public double GetThird 
        {
            get 
            {
                return Math.Sqrt((A * A) + (B * B));
            }
        }
    }
     class Program
    {
        static void Main(string[] args)
        {
            Triangle tri = new Triangle();
            Console.WriteLine("三角形的第三边长度:{0}", tri.GetThird);
            tri.A = 7;
            tri.B = 13;
            Console.WriteLine("三角形的第三边长度:{0}", tri.GetThird);

             Console.Read();
        }
    }

这里写图片描述

属性也可不用显示声明字段用于存贮数据。

/// <summary>
    /// 自动实现属性:c# 允许只声明属性而不声明后备字段,编译器会创建隐藏的后备字段。并且自动挂接到get,set访问器上。
    /// </summary>

    class C2
    {
        public int RealValue //分配内存
        {
            get;
            set;
        }
    }
       class Program
    {
        static void Main(string[] args)
        {

            C2 ctest = new C2();
            Console.WriteLine("属性值:{0}", ctest.RealValue);
            ctest.RealValue = 23;
            Console.WriteLine("属性值:{0}", ctest.RealValue);

            Console.Read();
        }
    }

这里写图片描述

也可以通定义其他函数来实现访问private字段

  class Person2
    {
        private string _name;

        //定义GetName方法
        public string GetName()
        {
            return _name;
        }
        //定义SetName方法,显示定义 value 参数 
        public void SetName(string value)
        {
            this._name = value;
        }
        private int _age;
        public int Age //属性
        {
            private get
            {
                return _age;
            }
            set
            {
                if ((value < 0) || (value > 130))
                    Console.WriteLine("输入的年龄值无效!!");
                else
                {
                    this._age = value;
                }
            }
        }
        public void Print()
        {
            Console.WriteLine("name: {0},age= {1}", _name, _age);
        }
    }
     class Program
    {
        static void Main(string[] args)
        {

            Person2 per = new Person2();
            per.SetName("xiao hong"); //通过方法给字段赋值。
            per.Age = 23;//通过属性给字段赋值。
            per.Print();

            Console.Read();
        }
    }

这里写图片描述

通过上面的代码,可以看到属性的set,get,访问器更简洁。
从代码上看,属性有set,get,访问器;字段没有。
定义方法访问字段,需显示定义value

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用字段属性(Properties)的好处有以下几点: 1. 封装性:字段属性允许你控制对类的字段的访问,并提供了更严格的封装性。你可以定义只读、只写或读写属性,以控制外部代码对字段的访问和修改。这样可以防止对字段的意外修改,同时提供更好的数据安全性和代码可靠性。 2. 访问控制:通过使用字段属性,你可以限制对字段的访问权限。例如,你可以将某个属性定义为只读,这意味着其他代码只能读取该属性的值,而无法修改它。这种访问控制有助于保护数据的完整性和一致性。 3. 额外逻辑处理:使用字段属性,你可以在获取或设置属性值的过程中执行额外的逻辑处理。这样可以在属性的读取或写入过程中进行数据验证、计算或触发其他操作。例如,你可以在设置属性值之前检查其有效性,并在需要时引发异常或执行其他处理。 4. 与字段对应的方法:通过定义属性,你可以将对字段的读取和写入操作封装在属性方法中。这样可以使代码更加一致和易于理解,并且可以提供更好的可维护性。属性方法可以像访问字段一样使用,但实际上它们是方法调用,这使得代码更加灵活和可扩展。 5. 对象的统一访问方式:使用属性,你可以以一致的方式访问对象的字段属性。这使得代码更易读、易维护,并且提供了更好的代码组织和可重用性。 总的来说,使用字段属性可以提供更好的封装性、访问控制、额外逻辑处理和代码组织,从而改善代码的可靠性、安全性和可维护性。 希望这回答了你的问题!如果还有其他疑问,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值