Pregunta

Lets say I have class Dog:

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

And a class Animal:

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

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

The above to classes are in my class library and I added it as reference to my project.. Everything works fine but what I want is whoever uses this library should not be able to use class Dog, I mean he should not be able to do something like Dog dog = new Dog();. I tried to make it internal, but then, I must also write internal in Animals class and if I do this I can't use the GetDogs() method.

Any suggestions?

¿Fue útil?

Solución

Make internal constructor for Dog class. internal Dog(){}. Then only that assembly can create new Dog(), but everyone can use Dog class.

Otros consejos

Change Dog to

public class Dog
{
    internal Dog()
    {

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

then

Dog d = new Dog();

will produce

The type 'Dog' has no constructors defined. Cannot access internal constructor 'Dog' here.

If you wish to return Dogs you'll have to keep it public. If you wish to prevent creating Dogs outside of an assembly - make his constructor internal.

Another option is to use interfaces.

if animals is the only class that uses dog then you could make dog a nested private class in animals and therefore only accessible in animals. But why do you want to do this?

You can make the Dog class as public but its default constructor as internal:

public class Dog
{
    internal Dog() {}
}

Using internal on the default contstructor will restrict initializing it from the code outside the assembly.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top