使对象只能被子实例访问

时间:2013-11-23 22:21:41

标签: c# static

我有以下课程

public class Manager
{
   public SharedObject sharedobj {get;set;}
   public SomeObject someobj {get;set;}
   public AnotherObject anotherobj {get;set;}
   //...
}

我希望sharedobj只能从Manager类实例中的任何实例访问

使它静态不是一个选项,因为我将有多个Manager类的实例,所以我唯一想到的是将sharedobj发送到将使用它的每个对象的构造函数,我想知道是否有一个更好的方法来实现这样的事情,而不必在每个需要使用它的实例中引用sharedobj

我想到的另一种方法是使用protected关键字并使其他类继承管理器

2 个答案:

答案 0 :(得分:1)

protected (C# Reference)

  

protected关键字是成员访问修饰符。受保护的成员可在其类和派生类实例中访问。有关使用其他访问修饰符进行保护的比较,请参阅辅助功能级别。

这假设您希望每个人都拥有自己的共享对象,如果您有经理,则可以访问该对象。


另外,您也可以使用Dependency Injection(a.k.a DI)来执行此操作。这是迄今为止我见过的最简单,最简短的DI解释:http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html

这是一种更高级的方法,它有自己的积极和消极,就像其他一切,但至少阅读我提到的短链接,所以你会知道它是什么。

答案 1 :(得分:1)

您必须将其传递给每个对象,就像您写的那样。在构造函数中,或者只是在SomeObjectAnotherObject中创建一个setter,然后使用它。我会选择你写的东西,然后把它传递给构造函数。

在旁注中,除了Manager中的对象之外别的什么都不应该使用SharedObject,那么在Manager类中它可能应该是私有的而不是公共的。