这里发生了什么事? 什么样的成员是“可选”?
任何人都可以告诉我下面的代码中发生了什么。 将成员声明为类类型的原因是什么?
public sealed class UrlParameter
{
// Summary:
// Contains the read-only value for the optional parameter.
public static readonly UrlParameter Optional;
// Summary:
// Returns an empty string. This method supports the ASP.NET MVC infrastructure
// and is not intended to be used directly from your code.
//
// Returns:
// An empty string.
public override string ToString();
}
我在路线注册方法中看到它:
routes.MapRoute(name:“Default”,url:“{controller} / {action} / {id}”,默认值:new {controller =“Home”,action =“AboutView1”,id = UrlParameter.Optional});
虽然这可能看起来很奇怪,但Optional
字段只是单例设计模式的实现(请参阅此处的静态初始化)。 在这种情况下是一个非常特殊的。
由于该字段标记为static
,因此您的应用程序中只有一个UrlParameter
类实例。 readonly
修饰符意味着对这个字段的赋值只能作为声明的一部分或者在同一个类的构造函数中出现(看看这里)。 在这个具体的例子中, Optional
总是被设置为null(见这里)。 所以它是一个单例,但仅仅是一个常量,因为它被定义为null。
微软可能会这样做,以便将来可以更改Optional
字段的值,而不会破坏现有代码(请参阅const
和static readonly
之间的区别) - const
迫使您重新编译所有现有代码,以防更改它再次工作,而static readonly
不。
上一篇: What's happening here? What kind of member is "Optional"?