这里发生了什么事? 什么样的成员是“可选”?

任何人都可以告诉我下面的代码中发生了什么。 将成员声明为类类型的原因是什么?

    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字段的值,而不会破坏现有代码(请参阅conststatic readonly之间的区别) - const迫使您重新编译所有现有代码,以防更改它再次工作,而static readonly不。

链接地址: http://www.djcxy.com/p/49993.html

上一篇: What's happening here? What kind of member is "Optional"?

下一篇: Asp.Net MVC area parameter in config section