在集合中的对象上设置属性

时间:2016-05-05 11:03:28

标签: c# collections

我有abstract班......

public abstract class MyClass
{
    // other properties
    public bool IsTypeDefault {get;set;}
}

我还有许多继承自MyClass的其他类,比如MyClassAMyClassBMyClassC等。

我有一个定义为...的集合类

public class MyCollection : List<MyClass>
{
    public SetAsTypeDefault(MyClass item)
    {

    }
}

方法SetAsTypeDefault应该使用MyClass类型的对象,它会在集合中搜索相同特定类型的项目,在其找到的任何项目上取消设置IsTypeDefault value为true,然后将匹配传入参数的项设置为true。

想要的是阻止某人直接在集合的单个实例上设置IsTypeDefault值,而我无法弄清楚如何去做。

我可以只读取IsTypeDefault,但是我无法从集合类中设置它。我可以将其设置为private set并设置一个方法,但该方法需要公开才能从集合中调用。

我只是打算尝试这样做'因为访问这门课程的开发人员将完全不受我的控制。我也无法审查他们的代码,我想确保他们不会搞砸。

我很欣赏我无法阻止他们故意破坏某些东西,例如使用反射,但如果他们这样做,我希望它是因为他们是故意这样做而不是粗心大意。

有可能吗?

帖子后想法

我想我可以将事件附加到IsTypeDefault属性并让集合类订阅该事件,让它(集合)在允许(或不允许)之前进行验证对集合中实例的更改。是

1 个答案:

答案 0 :(得分:1)

如果MyCollectionMyClass都在同一个程序集中,但使用它的开发人员不是 - 那么它就是设置setter的简单案例internal

public abstract class MyClass
{
    // other properties
    public bool IsTypeDefault {get; internal set;}
}