c# - 为什么使用 C# 的 ASP.NET 类的属性通常是公共(public)的,而使用 C# 的桌面应用程序的属性是私有(private)的?

标签 c# asp.net-mvc

我搜索过高低(很可能错过了),但在我多年的编程中,我总是遇到一种似乎是 OOP 标准的做法,即在具有公共(public)方法的对象来操作数据。

然而,我越深入研究 ASP.NET(特别是 MVC),我在类(特别是模型)内部看到的公共(public)属性就越多,例如 Scottgu's blog discussing the Entity Framework 中所示的那些.

这与 LINQ 填充类的方式有关吗?

提前致谢,答案可能就在那里,但我已经找了很长时间,无法弄清楚为什么 ASP.NET 使用 public,甚至桌面 C# 应用程序使用 private。

最佳答案

您混淆了字段属性。 .NET 语言中属性的概念基本上是对您正在描述的 getset 函数的封装。

例如:

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 中的任何地方使用属性,而不会牺牲字段的便利性。这意味着您可以

  1. 保持一致(所有公共(public)成员都通过属性公开,而不是属性和字段的混合
  2. 要灵活,这样您就可以在以后(如果需要)将属性背后的代码更改为完整属性,而无需更改面向公众的 API,也不必重新编译任何程序集引用了你的类型。

关于c# - 为什么使用 C# 的 ASP.NET 类的属性通常是公共(public)的,而使用 C# 的桌面应用程序的属性是私有(private)的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197462/

相关文章:

c# - WPF Storyboard延迟播放wma文件

c# - 为什么 NetworkStream.Read 这么慢?

c# - ActionFilterAttribute 范围调用顺序

c# - 如何更改异步方法调用以防止强制调用堆栈异步

c# - 转换控制台应用程序部署的配置

c# - 从 MethodInfo 创建的表达式树中参数的显式转换

c# - 按顺序循环父控件

c# - 自动编译 Linq 查询

asp.net-mvc - 使ajax get在auth超时时重定向主页以登录

asp.net-mvc - 需要 MVC 模型验证不适用于所有领域