一、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);
}
}