以下代码有何作用?
class MyClass {
private int[] myPrivates;
public int[] GetMyPrivates
{
get { return myPrivates; }
}
protected int[] SetMyPrivates
{
set { myPrivates = value; }
}
}
是否有更好的方法来保护阵列myPrivates
?是否有可能只让它重新上架?
答案 0 :(得分:4)
您的问题非常不清楚。
您可能正在尝试撰写
public int[] MyArray {
get { return data; }
protected set { data = value; }
}
如果您想阻止人们修改数组(例如instance.MyArray[5] = 42
),则需要公开ReadOnlyCollection<int>
。
答案 1 :(得分:1)
您可以做的最好的事情之一就是使用.NET的auto-implemented properties
。这是一个允许您声明没有支持字段的属性的功能。支持字段由.NET自动生成。
因此,您的代码可以转换为:
class MyClass
{
public int[] GetMyPrivates
{
get;
protected set;
}
}
现在,关于你更通用的问题,“你能在课堂上做什么”。嗯......这是一个非常真正开放的问题,值得长期解释。但是,只需浏览表面,您就可以:
还有更多可以说的内容,但这可以让您了解在.NET中使用类时可以使用的强大功能
答案 2 :(得分:0)
您可以通过以下方式替换您的getter和setter:
class MyClass {
public int[] MyValues { get; protected set; }
public MyClass() {
MyValues = new [] {1, 2, 3, 4, 5};
}
public void foo {
foreach (int i in MyValues) {
Trace.WriteLine(i.ToString());
}
}
}
MyOtherClass {
MyClass myClass;
// ...
void bar {
// You can access the MyClass values in read outside of MyClass,
// because of the public property, but not in write because
// of the protected setter.
foreach (int i in myClass.MyValues) {
Trace.WriteLine(i.ToString());
}
}
}
您可以添加几乎任何属性 的保护级别为getter和setter。
答案 3 :(得分:0)
如果您来自 Java背景(您的括号提示),您可能需要知道.NET有一个名为properties的概念,因此您可以说:
class MyClass {
private int[] myPrivates;
public int[] MyPrivates {
get { return myPrivates; }
set {myPrivates = value;}
}
}
甚至是自动属性:
class MyClass {
public int[] MyPrivates {get; set;}
}