【系列文章目录】
前言
本篇介绍属性
一、什么是属性
1.文档中的描述
还是照常先看来自官方的描述
属性是 C# 中的一等公民。 借助该语言所定义的语法,开发人员能够编写出准确表达其设计意图的代码。
访问属性时,其行为类似于字段。 但与字段不同的是,属性通过访问器实现;访问器用于定义访问属性或为属性赋值时执行的语句。
有点看不懂,那就继续看看官方的例子吧
属性语法是字段的自然延伸。 字段定义存储位置:
public class Person { public string FirstName; // remaining implementation removed from listing }
属性定义包含 get 和 set 访问器的声明,这两个访问器用于检索该属性的值以及对其赋值:
public class Person { public string FirstName { get; set; } // remaining implementation removed from listing }
上述语法是自动属性语法。 编译器生成支持该属性的字段的存储位置。
编译器还实现 get 和 set 访问器的正文。
这样看就清楚了,对于字段和属性是有区别的
字段就是正常我们定义变量的方式
而属性需要有访问器即get和set
而get与set分别对应了一个对应属性类型返回值的函数
但是这样有什么好处或者说有什么意义呢?感觉好像都是定义了一个变量
2.我的理解
我认为属性相比字段的好处是
- 隔离类的内部变化,让外部不受影响
- 外部获取属性时,会按照一定的流程得出想要的结果
举个例子吧
public class Person
{
public int Age
{
get
{
//今年减去出生年得出年龄
return DateTime.Now.Year - BirthYear;
}
}
//出生年
public int BirthYear;
}
当然如果只是为了功能,以下写法也可以实现
public class Person{
public int GetAge()
{
//今年减去出生年得出年龄
return DateTime.Now.Year - BirthYear;
}
//出生年
public int BirthYear;
}
但是这样就好像怪怪的,年龄明明应该是一个属性,却用了一个方法来获取
那么在C#中
什么时候该使用属性?
什么时候使用字段什么?
时候使用方法呢??
按照我的理解:
- 字段应该尽量为私有(private)或保护(protected)
- 公共字段应该尽量改为使用属性(即使不需要验证流程)
- 当执行一个行为,或者需要传入参数来得出一个变量时使用方法
二、没什么用的冷知识
C# 1.0 中的属性,不能简写为
public string FirstName {
get; set; }
而这样定义
private string mFirstName;
public string FirstName
{
get {
return mFirstName; }
set {
mFirstName = value; }
}
也就是简写方式实际上是一种语法糖
属性真正的运作方式是C#1.0中那样的