C#中的数组属性语法
我有一个具有整数数组属性的类,我正在尝试为它找出正确的语法。 int数组在类构造函数中实例化。
class DemoClass { private int[] myNumbers; public int[] MyNumbers { get { /* Some logic */ } set { /* Some logic */ } } public DemoClass(int elements) { // Here, the array should get instantiated using the elements. } }
如果我希望我的客户端代码通过属性MyNumbers
从数组中检索数字,get / set块语法如何工作? 我怎样才能发送正确的索引? 我有什么要初始化的?
你在找:
class DemoClass { public int[] MyNumbers { get; private set; } public DemoClass(int elements) { MyNumbers = new int[elements]; } }
对于除了公开私有字段(你似乎想要)之外什么都不做的普通属性:
private int[] myNumbers; public int[] MyNumbers { get { return myNumbers; } set { myNumbers = value; } }
CA1819:属性不应返回数组
https://msdn.microsoft.com/en-us/library/0fss9skc.aspx
即使属性是只读的,属性返回的数组也不会被写保护。 为了防止数组防篡改,属性必须返回数组的副本。 通常,用户不会理解调用此类属性的不利性能影响。 具体来说,他们可能会将该属性用作索引属性。
要修复违反此规则的问题,请将该属性设为方法或更改属性以返回集合而不是数组
如果数组中元素的数量是固定的,我只会为数组提供一个getter并且不用设置器。 您仍然可以为数组中的各个元素赋值,但这样可以防止有人将整个数组从您下面交换(或将其设置为null
。代码如下所示:
class DemoClass { public int[] MyNumbers { get; private set; } public DemoClass(int elements) { MyNumbers = new int[elements]; } }
如果元素的数量没有固定,那么你应该使用List
而不是数组,然后你肯定想要一个没有setter的属性。
class DemoClass { private int[] myNumbers; public int[] MyNumbers { get { return myNumbers; } set { myNumbers = value; } } public DemoClass(int[] elements) { myNumbers = elements; // Here, the array should get instantiated using the elements. } }
它被称为自动实现的属性 。 所以如果你有类似的语法
public int[] MyNumbers { get; set; }
C#编译器会自动为您创建后备字段。 此function是在C#3.0中引入的,在此之前,您始终必须使用支持字段实现属性。
您可以在以下位置阅读更多信息: 新C#“Orcas”语言function:自动属性,对象初始化程序和集合初始化程序
上述就是C#学习教程:C#中的数组属性语法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
class DemoClass { private int[] myNumbers; public int[] MyNumbers { get { return myNumbers; } set { myNumbers = value;} } public DemoClass(int elements) { // Here, the array should get instantiated using the elements. MyNumbers = new int[5] { 1, 2, 3, 4, 5}; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1006175.html