这似乎是一个简单的问题,但由于某种原因,我无法在任何地方找到答案.基本上,我希望能够实现一个带NamedParameters的构造函数.
通过命名参数,我不是指具有默认值(可选参数)的参数,例如:
public SomeMethod(){
string newBar = Foo(bar2 : "customBar2");
}
public string Foo(string bar1 = "bar1", bar2 = "bar2" ){
//...
}
Run Code Online (Sandbox Code Playgroud)
什么我想实现一个很好的例子是AuthorizeAttribute从System.Web.Mvc装配.您可以使用以下方式:
[Authorize(Roles = "Administrators", Users = "ThatCoolGuy")]
public ActionResult Admin(){
}
Run Code Online (Sandbox Code Playgroud)
intellisense中构造函数的签名类似于以下示例,我相信(请确认)那些NamedParameters正在映射到类属性.
AuthorizeAttribute.AuthorizeAttribute(NamedParameters ...)Initiliaze System.Web.Mvc.AuthorizeAttribute类的新实例
命名参数:
- 订单int
- 用户字符串
- 角色字符串
请考虑以下方法示例:
public void MyMethod (string par1, bool par2 = "true", string par3="")
{
}
Run Code Online (Sandbox Code Playgroud)
现在让我们说我调用MyMethod并将par3的值设置为"IamString".
如果不将par2的值设置为true或false,我怎么能这样做?
我基本上想要将par2值保留为默认值.
我问这个是因为在Flash的ActionScript中可以通过使用关键字default来做到这一点,所以我可以调用MyMethod("somestring",默认,"IamString"),par2将被解释为true,这是它的默认值.我想知道C#是否也有可能.
我想这个命名可能有历史原因,其他语言也有相似的功能,但在我看来参数总是在C#中有一个名字.争论是未命名的.或者是否有一个特殊原因选择这个术语?