c# - "Read only"C# 中的属性访问器

标签 c# .net properties readonly accessor

我有以下类(class):

class SampleClass
{
   private ArrayList mMyList;

   SampleClass()
   {
       // Initialize mMyList
   }

   public ArrayList MyList
   {
       get { return mMyList;}
   }
}

我希望用户能够获得 mMyList,这就是为什么我通过属性公开“get”,但我不希望他们对对象进行更改(即 MyList.Add(new Class());)回到我的类(class)。

我想我可以返回对象的副本,但这可能会很慢,我正在寻找一种方法来提供编译时错误,通知用户他们不应该期望能够修改返回的属性(property)的值(value)。

这可能吗?

最佳答案

使用 ArrayList 时,您的功能相当有限,因为 BCL 中没有只读的非泛型集合类。快速而肮脏的解决方案是返回一种 IEnumerable 类型。

   public IEnumerable MyList
   {
       get { return mMyList;}
   }

这实际上不会阻止某人转换到 ArrayList 但默认情况下它也不允许编辑

您可以通过调用 ArrayList.ReadOnly 返回一个有效的只读列表。但是它的返回类型是 ArrayList,因此用户仍然可以使用 .Add 进行编译,但会产生运行时错误。

关于c# - "Read only"C# 中的属性访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619396/

相关文章:

c# - 调试只发生在 exe 而不是来自 IDE 的异常

c# - .NET 6 System.Text.Json JsonPropertyOrder 在超过 16 个属性时失败

.net - 如何在不打数据库的情况下获取独立关联的外键值?

c# - C#创建表并将行插入到SQL Server 2008中

javascript - 操作对象文字: add property in certain order

c# - Linq ForEach - 返回不能将 'void' 分配给隐式类型的局部变量

c# - 在文件夹内创建多个子文件夹

c# - 抽象类或接口(interface)。哪种方式是正确的?

C#动态改变对象的属性

Javascript 属性作为 var