Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用属性将私有数组公开为只读?_C#_Properties_Private_Protected - Fatal编程技术网

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代码。我在寻找答案,但我刚刚为你们更新了我的答案。你们已经提供了时间。我会接受的