我搜索过高低(很可能错过了),但在我多年的编程中,我总是遇到一种似乎是 OOP 标准的做法,即在具有公共(public)方法的对象来操作数据。
然而,我越深入研究 ASP.NET(特别是 MVC),我在类(特别是模型)内部看到的公共(public)属性就越多,例如 Scottgu's blog discussing the Entity Framework 中所示的那些.
这与 LINQ 填充类的方式有关吗?
提前致谢,答案可能就在那里,但我已经找了很长时间,无法弄清楚为什么 ASP.NET 使用 public,甚至桌面 C# 应用程序使用 private。
最佳答案
您混淆了字段和属性。 .NET 语言中属性的概念基本上是对您正在描述的 get
和 set
函数的封装。
例如:
private int foo;
public int FooProperty
{
get { return foo; }
set { foo = value; ]
}
这与您在其他情况下看到的类似:
private int foo;
public int getFoo()
{
return foo;
}
public int setFoo(int value)
{
foo = value;
}
它基本上提供了类似于普通字段的语法,同时为开发人员提供了对实际获取和设置行为的控制。
可能会让您更加困惑的是,C# 有一种自动实现简单属性的简写形式(如上所示)。这样做:
public int Foo { get; set; }
实际上只是这个的简写:
private int _foo;
public int Foo
{
get { return foo; }
set { foo = value; }
}
这使您可以在面向公众的 API 中的任何地方使用属性,而不会牺牲字段的便利性。这意味着您可以
- 保持一致(所有公共(public)成员都通过属性公开,而不是属性和字段的混合
- 要灵活,这样您就可以在以后(如果需要)将属性背后的代码更改为完整属性,而无需更改面向公众的 API,也不必重新编译任何程序集引用了你的类型。
关于c# - 为什么使用 C# 的 ASP.NET 类的属性通常是公共(public)的,而使用 C# 的桌面应用程序的属性是私有(private)的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197462/