C# 如何使用属性将私有数组公开为只读?
下面的代码做什么C# 如何使用属性将私有数组公开为只读?,c#,properties,private,protected,C#,Properties,Private,Protected,下面的代码做什么 class MyClass { private int[] myPrivates; public int[] GetMyPrivates { get { return myPrivates; } } protected int[] SetMyPrivates { set { myPrivates = value; } } } 是否有更好的方法保护阵列myPrivates?是否可以使其仅为reat
class MyClass {
private int[] myPrivates;
public int[] GetMyPrivates
{
get { return myPrivates; }
}
protected int[] SetMyPrivates
{
set { myPrivates = value; }
}
}
是否有更好的方法保护阵列
myPrivates
?是否可以使其仅为reat?您可以通过以下方式将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添加几乎任何小于属性之一的保护级别 可以通过以下方式使用属性替换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添加几乎任何小于属性之一的保护级别 你的问题非常不清楚
你可能正在尝试写作
public int[] MyArray {
get { return data; }
protected set { data = value; }
}
如果你想阻止人们修改数组(例如,instance.MyArray[5]=42
),你需要公开一个ReadOnlyCollection
。你的问题非常不清楚
你可能正在尝试写作
public int[] MyArray {
get { return data; }
protected set { data = value; }
}
如果你想阻止人们修改数组(例如,
instance.MyArray[5]=42
),你需要公开一个ReadOnlyCollection
。如果你来自Java背景(你的括号提示是这样),你可能需要知道.NET有一个叫做属性的概念,所以你可以说:
class MyClass {
private int[] myPrivates;
public int[] MyPrivates {
get { return myPrivates; }
set {myPrivates = value;}
}
}
甚至自动属性:
class MyClass {
public int[] MyPrivates {get; set;}
}
如果您来自Java背景(括号中有提示),您可能需要知道.NET有一个称为属性的概念,因此您可以说:
class MyClass {
private int[] myPrivates;
public int[] MyPrivates {
get { return myPrivates; }
set {myPrivates = value;}
}
}
甚至自动属性:
class MyClass {
public int[] MyPrivates {get; set;}
}
你能做的最好的事情之一就是使用.NET的。这是一项允许您在没有支持字段的情况下声明属性的功能。支持字段由.NET自动生成 因此,您的代码可以翻译为:
class MyClass
{
public int[] GetMyPrivates
{
get;
protected set;
}
}
现在,关于你更一般的问题,“你能在类中做什么”。好这是一个非常非常悬而未决的问题,值得一个长期的解释。但是,只要略过表面,你就可以:
- 定义对象(这就是所做的)
- 通过(简单变量)和(类似字段的方法)描述对象的特征
- 通过描述对象的行为(这是函数的面向对象行话)
- 定义项目(对象、特征和/或行为)是静态的还是实例的。简单地说,instance表示您正在处理对象/特征/行为的特定实例表示您正在处理整个对象族
- 为您的对象/特征/行为(例如,内部、公共、受保护、私有)定义
可以说的还有很多,但这应该会让您了解在使用.NET中的类时,您可以使用的功能。这是一项允许您在没有支持字段的情况下声明属性的功能。支持字段由.NET自动生成 因此,您的代码可以翻译为:
class MyClass
{
public int[] GetMyPrivates
{
get;
protected set;
}
}
现在,关于你更一般的问题,“你能在类中做什么”。好这是一个非常非常悬而未决的问题,值得一个长期的解释。但是,只要略过表面,你就可以:
- 定义对象(这就是所做的)
- 通过(简单变量)和(类似字段的方法)描述对象的特征
- 通过描述对象的行为(这是函数的面向对象行话)
- 定义项目(对象、特征和/或行为)是静态的还是实例的。简单地说,instance表示您正在处理对象/特征/行为的特定实例表示您正在处理整个对象族
- 为您的对象/特征/行为(例如,内部、公共、受保护、私有)定义
还有很多可以说的,但这应该让你知道当你使用.NET中的类时,你有多大的权力可以支配。。你想要只读的吗?如果您需要setter,那么显然它不应该是只读的。如果你不需要setter,那就把它设为只读。我个人认为保护个人隐私总是个好主意。你为什么要写C#Javastyle?@Albin sunnabo Javastyle到底是什么?这里需要的唯一答案是:
lolwhut代码>“为什么不让myPrivates只读?”。。你想要只读的吗?如果您需要setter,那么显然它不应该是只读的。如果你不需要setter,那就把它设为只读。我个人认为保护个人隐私总是个好主意。你为什么要写C#Javastyle?@Albin sunnabo Javastyle到底是什么?这里需要的唯一答案是:lolwhut代码>使用时是否生成编译错误使用时是否生成编译错误myPrivates在哪里??我需要在课堂内获得和设置。这是一个自动属性。我将添加一个用法示例.is作为speudo代码。我在寻找答案,但我刚刚为你们更新了我的答案。你们已经提供了时间。我将接受我的私人在哪里??我需要在课堂内获得和设置。这是一个自动属性。我将添加一个用法示例.is作为speudo代码。我在寻找答案,但我刚刚为你们更新了我的答案。你们已经提供了时间。我会接受的