C#中的 属性 字段 成员变量

属性和字段都是成员变量,用于存储数据,但属性提供了访问控制和额外的逻辑处理。属性的get和set方法可以添加条件,如在温度计类中转换摄氏度和开尔文。当需求变化时,属性允许不修改字段名而改变其行为。派生类可以隐藏基类的属性,实现不同行为。
摘要由CSDN通过智能技术生成

(1)首先属性和字段都是成员变量

(2)其次属性和字段都是用来存储数据的

(3)属性和字段的区别

 class test
    {
        private int a = 1;
        public int A
        {
            get { return a; }
            set { a = value; }
        }
    }

字段 private 修饰,用在类内部;

属性 public 修饰,供外部类访问修改。

属性相当于字段的保护套,读字段走get,写字段走set。

在get{}和set{}中可以增加限制内容。

(4)为什么有字段的前提下还要用属性

方便维护,

(a)可以在get set处对要操作的字段增减逻辑运算

摄氏度℃

class Thermometer
    {
        private double temperature;
        public Thermometer(double temperature)  //构造函数
        {
            this.temperature = temperature;
        }
        public double Temperature
        {
            get { return temperature; }
            set { temperature = value; }
        }
    }

由于需求改变,设置成开尔文温度K

 class Thermometer
    {
        private double temperature;
        public Thermometer(double temperature)  //构造函数
        {
            this.temperature = temperature;
        }
        public double Temperature
        {
            //****修改后****↓↓↓↓↓↓↓↓
            get { return temperature - 273.15; }
            set { temperature = value + 273.15; }
            //****修改后****↑↑↑↑↑↑↑↑
        }
    }

(b)可以更改要get set的字段

开始使用a

public int A
{
 set
 {
   a = value;
 }
 get
 {
   return a;
 }
}

需求改变,使用b

public int B
{
 set
 {
   b = value;
 }
 get
 {
   return b;
 }
}

(5)访问基类中被派生类中具有同一名称的另一属性隐藏的属性。

// property_hiding.cs
// Property hiding
using System;
public class BaseClass 
{
   private string name;
   public string Name
   {
      get 
      {
         return name; 
      }
      set 
      {
         name = value; 
      }
   }
}

public class DerivedClass : BaseClass 
{
   private string name;
   public new string Name   // Notice the use of the new modifier
   {
      get 
      {
         return name; 
      }
      set 
      {
         name = value; 
      }
   }
}

public class MainClass 
{
   public static void Main() 
   {
      DerivedClass d1 = new DerivedClass();
      d1.Name = "John"; // Derived class property
      Console.WriteLine("Name in the derived class is: {0}",d1.Name);
      ((BaseClass)d1).Name = "Mary"; // Base class property
      Console.WriteLine("Name in the base class is: {0}",
         ((BaseClass)d1).Name);   
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值