(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);
}
}