3

假设我有类狗:

public class Dog {
    public String Breed { get; set; }
    public String Color { get; set; }
    ...
}

还有一类动物:

public class Animals {
    public Dog[] Dogs { get; set; }

    public Dog[] GetDogs() {
        ...
        return Dogs;
    }
    ...
}

上面的类在我的类库中,我将其添加为对我的项目的引用。一切正常,但我想要的是使用这个库的人不应该能够使用 class Dog,我的意思是他不应该做某事喜欢Dog dog = new Dog();。我试图使它成为internal,但是,我还必须在class 中编写internalAnimals,如果这样做,我将无法使用 GetDogs() 方法。

有什么建议么?

4

5 回答 5

5

为 Dog 类创建内部构造函数。internal Dog(){}. 然后只有那个程序集可以创建new Dog(),但每个人都可以使用 Dog 类。

于 2013-07-26T05:16:16.140 回答
3

更改Dog

public class Dog
{
    internal Dog()
    {

    }
    public String Breed { get; set; }
    public String Color { get; set; }
}

然后

Dog d = new Dog();

会产生

'Dog' 类型没有定义构造函数。无法在此处访问内部构造函数“Dog”。

于 2013-07-26T05:16:58.817 回答
1

如果您想归还 Dogs,则必须将其公开。如果您希望防止在程序集之外创建 Dogs - 将他的构造函数设置为内部。

另一种选择是使用接口。

于 2013-07-26T05:16:09.987 回答
1

如果动物是唯一使用狗的类,那么您可以使狗成为动物中嵌套的私有类,因此只能在动物中访问。但是你为什么要这样做呢?

于 2013-07-26T05:17:26.140 回答
1

您可以将Dog类设为public但其默认构造函数internal

public class Dog
{
    internal Dog() {}
}

在默认构造函数上使用internal将限制从程序集外部的代码对其进行初始化。

于 2013-07-26T05:18:28.033 回答