gpt4 book ai didi

c# - 什么时候使用公共(public)字段才有意义?

转载 作者:IT老高 更新时间:2023-10-28 20:58:40 27 4
gpt4 key购买 nike

这是我已经有一段时间的问题了:

像这样公开公开字段什么时候有意义?

public class SomeClass()
{
public int backing;
}

这样做的缺点(除了激怒 OOP 精英之外)是,如果您需要在此数据之上添加任何逻辑,则必须对 API 进行重大更改。我想这就是精英们所谈论的。

长期以来,Java 和 C# 的最佳实践是使用 getter/setter 或属性来访问字段。

public class SomeClass()
{
private int backing;

public int getBacking()
{
return backing;
}

public void setBacking(int v)
{
backing = v;
}
}

C# 已将其演变为具有自动属性的非常简单的语法:

public class SomeClass()
{
public int Backing { get; set; }
}

懒惰的我仍然觉得这太长了,因为我发现自己做了很多事情。更重要的是,我不确定我知道公共(public)领域在哪里更有意义。

为什么不将公开声明的字段视为幕后的属性(或方法)?这样就不可能激怒脱钩之神,也不会少打字。

public class SomeClass()
{
public int backing; // The same as public int backing { get; set; }
}

对于只包装底层字段的属性,我很确定 JIT 优化了方法调用,因此性能可能不是问题。有什么想法吗? (除了字段名称的正确大小写约定)

编辑:感谢所有回复。我觉得也许不是每个人都理解我的问题。什么时候公共(public)领域比属性(property)更好?为什么是更好的选择?如果唯一的原因是方便(更少的打字和困惑),那么每当遇到公共(public)字段时让编译器生成一个“幕后”属性的缺点是什么。基本上,不可能创建一个真正的公共(public)字段(因为它们都是属性)。那会有什么问题呢?谢谢。

最佳答案

在我看来,当你设计一个类的结构时,你应该更多地关注 future 的变化,并且应该始终对它们友好。如果 future 的需求需要您在返回值之前执行一些逻辑,而不仅仅是返回字段的值,则您必须更改类的接口(interface),并且您的库的所有用户都必须更改。这通常会变成一场灾难。

请记住,open / close principle .

关于c# - 什么时候使用公共(public)字段才有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989973/

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