c#属性要求和命名参数
本文关键字:参数 求和 属性 | 更新日期: 2023-09-27 17:49:19
我正在创建c#自定义属性,我想传递一些参数。我有4个参数,其中一个是可选的。我发现,可选参数必须设置为命名参数,而必需参数是位置参数。
如果我以这样的方式编写代码,我希望所有参数都以命名方式使用(对我来说看起来更干净),该怎么办?必需的参数应该总是被定位,并且作为可选的形式?这方面的最佳实践是什么?
下面是我的代码:[AttributeUsage(AttributeTargets.Field)]
public class MyAttribute : Attribute
{
private string _field1 = null;
private string _field2 = null;
private string _field3 = null;
private string _field4 = null;
public MyAttribute(string Field1, string Field2, string Field3)
{
_field1 = Field1;
_field2 = Field2;
_field3 = Field3;
}
public string Field4
{
get { return _field4; }
set { _field4 = value; }
}
}
可选参数应该位于参数列表的末尾(之后的任何参数也应该是可选的),例如:
public MyAttribute(string Field1, string Field2, string Field3, string Field4 = "")
{
}
在该声明中,它是最后一个可选参数,它之后的任何参数也必须是可选的。这在MSDN的引用中突出显示:
可选参数定义在参数列表的末尾,在任何必需参数之后。如果调用方为一系列可选参数中的任何一个提供参数,则必须为前面的所有可选参数提供参数。不支持参数列表中以逗号分隔的空格。例如,在下面的代码中,实例方法ExampleMethod定义了一个必需参数和两个可选参数。
我想先评论澄清一下,但是我的名声不允许我这么做。(哈哈
首先,让我澄清你的命名参数的概念是什么?您提到"正如我所发现的,可选参数必须设置为命名参数。"因为如果你参考文档,它不会。命名参数仅供方法调用者指定哪个值是哪个值,而不依赖于方法声明中参数的顺序。下面是命名参数的用法:
public static void Main()
{
Example e = new Example(height: 64, weight: 123);
}
public class Example
{
int _weight;
int _height;
public CalculateBMI(int weight, int height)
{
_weight= weight;
_height = height;
}
}
命名参数的概念只是允许你区分哪个是哪个。
Example e = new Example(height: 64, weight: 123);
现在您的问题是"如果我以这样的方式编写代码,我希望所有参数都以命名方式使用(对我来说看起来更干净)怎么办?"您不能强制一个方法让调用者调用该方法并指定所有参数的名称。这不是命名参数的概念。
如果我误解了你,请告诉我,我很乐意纠正我所说的任何东西或补充细节。