如何使用属性将私有数组公开为只读? [关闭]
Posted
技术标签:
【中文标题】如何使用属性将私有数组公开为只读? [关闭]【英文标题】:How to use properties to expose a private array as read-only? [closed] 【发布时间】:2011-08-22 18:20:49 【问题描述】:下面的代码是做什么的?
class MyClass
private int[] myPrivates;
public int[] GetMyPrivates
get return myPrivates;
protected int[] SetMyPrivates
set myPrivates = value;
有没有更好的方法来保护数组myPrivates
?是否有可能使它成为唯一的?
【问题讨论】:
“为什么不让 myPrivates 只读?” 好吧.. 你想要它只读吗?如果您需要一个二传手,那么显然它不应该是只读的。如果您不需要 setter,则将其设为只读。 我个人认为保护自己的隐私总是一个好主意。 为什么要写 C# Javastyle? @Albin Sunnanbo javastyle到底是什么? 这里需要的唯一答案是:lolwhut?!
【参考方案1】:
您的问题非常不清楚。
你可能正在尝试写作
public int[] MyArray
get return data;
protected set data = value;
如果您想阻止人们修改数组(例如,instance.MyArray[5] = 42
),您需要改为公开ReadOnlyCollection<int>
。
【讨论】:
我使用时会产生编译错误【参考方案2】:您可以通过这种方式将您的 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 的属性之一。
【讨论】:
myPrivates 在哪里??我需要在课堂上进行设置。 这是一个自动属性。我将添加一个使用示例。 作为伪代码很有趣。但是我在寻找答案 我刚刚为你更新了我的答案。 您提供了时间。我会接受【参考方案3】:您可以做的最好的事情之一就是使用 .NET 的auto-implemented properties
。这是一项允许您在没有支持字段的情况下声明属性的功能。支持字段由 .NET 自动生成。
所以,你的代码可以翻译成:
class MyClass
public int[] GetMyPrivates
get;
protected set;
现在,关于您更笼统的问题,“您可以在课堂上做什么”。嗯...这是一个非常、非常的开放性问题,值得进行长时间的解释。但是,只要略过表面,您就可以:
定义对象(这就是 class 所做的) 通过fields(一个简单的变量)和properties(一种看起来像字段的方法)描述您的对象的特征。 通过methods描述对象的行为(这是面向对象的函数术语) 定义您的项目(对象、特征和/或行为)是静态的还是实例的。简单地说,instance 意味着您正在处理对象/特征/行为的特定实例; static 表示您正在处理整个对象系列 为您的对象/特征/行为(例如,内部、公共、受保护、私有)定义 access control可以说的还有很多,但这应该让您了解在 .NET 中使用类时所拥有的能力
【讨论】:
【参考方案4】:如果您来自 Java 背景(您的 括号 提示是这样),您可能需要知道 .NET 有一个称为属性的概念,因此您可以说:
class MyClass
private int[] myPrivates;
public int[] MyPrivates
get return myPrivates;
set myPrivates = value;
甚至是自动属性:
class MyClass
public int[] MyPrivates get; set;
【讨论】:
以上是关于如何使用属性将私有数组公开为只读? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章