如何在C#中为私有集设置值

时间:2018-12-17 14:43:40

标签: c#

因此,我需要遍历代码库,并删除所有公共设置器,并将其更改为不可变属性的私有设置。

我知道这将使我更难以设置值,而我可以通过构造函数来做到这一点。除了通过构造函数,我还有其他方法可以设置值吗?

重点是限制更改值的访问权限。

3 个答案:

答案 0 :(得分:1)

private string _value;
public SetValue(string value)
{
   _value = value;
}

ctrl + 属性以封装字段

答案 1 :(得分:1)

当我还需要在构造函数之外设置该属性时,可以使用多种方法在C#中创建不可变属性。

第一种情况是如果在设置对象后修改了对象,则会引发异常

private object _myProperty;
public object MyProperty
{
   public get { return _myProperty; }
   public set
   {
      if(_myProperty == null) { _myProperty = value; }
      else { throw new InvalidOperationException("MyProperty can't be changed onece set"); }
   }
}

此方法不能在运行前防止错误,但可以帮助您在做傻事时抓紧自己。

另一种方法是使用界面隐藏设置器。通过显式实现接口,您可以向用户隐藏属性或方法,除非他们将类强制转换为该特定接口。这实际上并不能使您的属性不变,但是可以帮助保护属性免遭意外修改。

public interface MyInterface
{
   object MyProperty { get; }
} 

public interface MyInterfaceProtected
{
   object MyProperty { set; }
}

public class MyClass : MyInterFace, MyInterfaceProtected
{
   private object _myProperty;
   public object MyProperty { get {return _myProperty;} }
   object MyInterfaceProtected.MyProperty
   {
      set { _myProperty = value; }
   }
}

答案 2 :(得分:0)

似乎您在谈论C#6 { get; }。这些属性只能从构造函数设置。

如果将属性定义为{ get; private set; },则可以从此类或派生类中进行设置。