使类在程序集之外不可见

时间:2013-07-26 05:12:10

标签: c# class access-modifiers

让我说我有班级狗:

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;
    }
    ...
}

上面的类在我的类库中,我添加它作为我的项目的参考..一切正常但我想要的是谁使用这个库不应该使用类Dog,我的意思是他不应该做Dog dog = new Dog();之类的事情。我尝试将其设为内部,但是,我还必须在Animals类中编写内部,如果我这样做,我就无法使用GetDogs()方法

有什么建议吗?

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

Dog更改为

public class Dog
{
    internal Dog()
    {

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

然后

Dog d = new Dog();

将产生

  

'Dog'类型没有定义构造函数。无法访问内部   建设者'狗'在这里。

答案 2 :(得分:1)

如果你想归还狗,你必须保持公开。 如果你想阻止在一个程序集之外创建Dogs - 让他的构造函数内部。

另一种选择是使用接口。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

public class Dog
{
    internal Dog() {}
}

在默认的contstructor上使用internal将限制从程序集外部的代码初始化它。