栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

【系列文章目录】

文章目录
  • 【系列文章目录】
  • 前言
  • 一、什么是属性
    • 1.文档中的描述
  • 2.我的理解
  • 二、没什么用的冷知识


前言

本篇介绍属性

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

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

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

而属性需要有访问器即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中那样的


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号