字段与属性的区别

本文深入探讨了编程中字段与属性的概念及其使用场景。通过对比,解释了属性如何提供灵活的数据访问机制,包括get和set访问器的作用及其实现方式。同时,文章还介绍了自动实现的属性,帮助读者理解何时应选择使用字段或属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“字段”是直接在结构中声明的任何类型的变量。字段是其包含类型的“成员”。


属性是这样的成员:它提供灵活的机制来读取、编写或计算某个私有字段的值。 可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法
这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。


class TimePeriod
{
    private double seconds;     //字段


    public double Hours         //属性
    {
        get { return seconds / 3600; }
        set { seconds = value * 3600; }
    }
}




class Program
{
    static void Main()
    {
        TimePeriod t = new TimePeriod();


        // Assigning the Hours property causes the 'set' accessor to be called.
        t.Hours = 24;


        // Evaluating the Hours property causes the 'get' accessor to be called.
        System.Console.WriteLine("Time in hours: " + t.Hours);
    }
}
// Output: Time in hours: 24




  • 属性使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码。

  • get 属性访问器用于返回属性值,而set 访问器用于分配新值。这些访问器可以有不同的访问级别。有关更多信息,请参见限制访问器可访问性(C# 编程指南)

  • value 关键字用于定义由set 取值函数分配的值。

  • 不实现 set 取值函数的属性是只读的。

  • 对于不需要任何自定义访问器代码的简单属性,可考虑选择使用自动实现的属性。 有关更多信息,请参见 自动实现的属性(C# 编程指南)

属性这玩意儿跟字段最大的区别在于取值赋值的操作逻辑是不一样的,对于字段,就是直接取值赋值,而对于属性,你可以自定义取值赋值的操作。可以认为属性是两个方法(一个取值一个赋值)合并的,取值的方法是无参数、返回值为属性类型的,赋值的方法是参数为属性类型、无返回值的
另一个差别在于字段只能是即能赋值又能取值,要么即不能赋值也不能取值,而属性更灵活,如果之后set就只能赋值了
代码演示
int someIntField = 1;
int someIntProperty
{
    set { someIntField = value; }
    get { return somrIntField; }
}
上面这属性的写法可以看成是下面两方法合并而成的:
void set_someIntProperty(int value)
{
    someIntField = value;
}
int get_someIntProperty()
{
    return somrIntField;
}

简而言之,属性有比字段更大的灵活性和可扩展性,但没有字段轻量,如果预支某项未来不会有什么变化且既要赋值又要取值,那么字段更省资源,其他情况下应属性或方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值