首页 > 解决方案 > 公开 Readonly 接口或公开 Readonly Struct 并参考原始?

问题描述

在里面class ItemContainer,我有一个私人收藏public class Item。我想将 Item 的属性公开给其他类,而不允许这些类更改它们,同时仍然能够从 ItemContainer 内部更改它们。所以我找到了两个选择。目前我有 Item 实现一个接口 IReadOnlyItem ...

public class Item : IReadOnlyItem
{
     public int Amount {get; set;}
}

public interface IReadOnlyItem
{
     public int Amount {get;}
}

这让事情变得很漂亮,因为我可以无缝地将 Item 对象传递给 IReadOnlyItem 参数,但问题是如果有人愿意,他们可以将 IReadOnlyItem 重新转换为 Item 并访问所有我不想要的东西他们可以访问。


另一种选择是制作一个单独struct ReadOnlyItem的,其中仅包含对项目的私有引用,以及公开该项目中包含的值的属性获取器......

public struct ReadOnlyItem
{
     public int Amount => item.Amount;

     private Item item;

     public ReadOnlyItem( Item item )
     {
          this.item = item;
     }
}

这种方法似乎更难维护,这意味着我不能只将 Item 作为 IItem 传递,而是new ReadOnlyItem(item)每次我想查看 Item 时都必须创建一个。

所以我的问题是,我们是否认为 struct 方法值得做以获得 Item 的内容始终安全的铁定安全性,或者接口方法是否足够好地表达了隐私的意图,我们不需要担心恶意编码器试图将其转换为原始类?

标签: structinterfaceprivacy

解决方案


推荐阅读