【从头构筑C#知识体系】1.5 属性

【系列文章目录】



前言

本篇介绍属性

【C#文档——属性】


一、什么是属性

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 访问器的正文。

这样看就清楚了,对于字段和属性是有区别的

字段就是正常我们定义变量的方式

而属性需要有访问器即getset

getset分别对应了一个对应属性类型返回值的函数

但是这样有什么好处或者说有什么意义呢?感觉好像都是定义了一个变量

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中那样的


猜你喜欢

转载自blog.csdn.net/ruanlinxi1994/article/details/125457907