gpt4 book ai didi

C# 属性封装

转载 作者:行者123 更新时间:2023-11-30 13:56:50 28 4
gpt4 key购买 nike

C# 属性是我在 c 系列语言中发现的最具表现力的工具之一。我的问题是为什么“支持”字段不能在属性 block 内?这是不允许的什么推理?

public int Salary //Compile error
{
int salary = 1000;
get {} //custom use of salary
set {}
}

我发现执行以下操作相当笨拙

int salary = 1000; //poor encapsulation but working code

public int Salary
{
get {} //edit the private field salary
set {}
}

我通过使用以下模式内存属性对一些代码进行了一些优化

int field;
bool flag = false;
public int Field
{
get
{
if (flag)
return field;
flag = true;
return field = expensiveOperation();
}
}

我真的很想在属性范围内移动这些变量,因为它们没有理由在实例范围内

public int Field //compile error
{
int field;
bool flag = false;
get
{
if (flag)
return field;
flag = true;
return field = expensiveOperation();
}
}

最佳答案

如果您有属性,它使用自己的数据,与属性所在的对象无关,那么我认为您应该从您的类中提取该属性。属性的目的是处理与声明属性的类相关的数据,并且具有整个类的范围。

另请记住 - 属性只是一对方法的语法糖。


旁注:您可以使用 Lazy<T> 用于字段的延迟初始化。例如

Lazy<int> field = new Lazy<int>(() => expensiveOperation());

关于C# 属性封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24246455/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com