C# 为什么在公共字段上使用属性?

C# 为什么在公共字段上使用属性?,c#,properties,field,C#,Properties,Field,我为什么要这样做: public T X { get; set; } 与此相反: public T X; 人们(包括一些答案)告诉我,“如果你以后想改变行为怎么办?”是一个答案,但那不是真的,因为我可以转换我的公共Tx进入 public T X { get { blabla; } set { blybly; } } 编辑:在发布更多关于“阅读此”和“阅读此”的链接之前,您可以查看这些链接。99%的链接中大部分都包含引用其他链接的其他人,实际上没有人给出正确的理由在字段上使用

我为什么要这样做:

public T X { get; set; }
与此相反:

public T X;
人们(包括一些答案)告诉我,“如果你以后想改变行为怎么办?”是一个答案,但那不是真的,因为我可以转换我的
公共Tx进入

public T X {
    get { blabla; }
    set { blybly; }
}
编辑:在发布更多关于“阅读此”和“阅读此”的链接之前,您可以查看这些链接。99%的链接中大部分都包含引用其他链接的其他人,实际上没有人给出正确的理由在字段上使用属性

下面是一个流行答案的例子:“您可以将setter设置为私有

public T X { get; private set; }

很明显,如果我想要一个私有setter,我会创建一个属性。但是如果我不想要,为什么不使用一个字段呢?如果我以后决定要一个私有setter,为什么我不能将我的字段从
public tx;
更改为
public tx{get;private set;}

我能想到的一件事就是这个

  • 在包含名为X的字段的中使用类创建程序集
  • 创建一个使用该类并设置X值的应用程序
  • 部署你的应用程序
  • 将类更新为属性,因为您需要getter/setter中的逻辑
  • 构建DLL并将其作为更新进行部署
  • 当您运行它时,您将获得System.MissingFieldException-因为消费者应用程序最初是为了查找字段而不是get_X方法而编写的


    您是否应该以这种方式部署应用程序是另一回事,但如果您是第三方代码提供商,并且客户端以这种方式使用您的库,则会使其部署的应用程序崩溃。

    请参阅“但这不是真的”“-这取决于你是否关心二进制兼容性、源代码兼容性、反射兼容性……这和我脑子里想的只有一个区别:反射。当你突然将某个字段更改为属性时,你会破坏检查该字段的代码。@CharlesMager在你发布的链接中没有正确的答案。@Skamah One该链接中有大量答案,我只是在中阅读了它们,它们似乎是你将属性用于字段的极好理由