Pregunta

Quiero hacer un tipo que puede ser heredada de por tipos en el mismo conjunto, pero no puede ser heredada desde fuera de la asamblea. Yo quiero que el tipo sea visible fuera de la asamblea.

¿Es esto posible?

¿Fue útil?

Solución

Se puede hacer que el constructor interno:

public class MyClass
{
    internal MyClass() { }
}

Cada clase que deriva de una clase base debe llamar a un constructor de la clase base en su constructor. Puesto que no puede llamar al constructor si la clase base está en un conjunto diferente, la clase derivada no se compila.

Otros consejos

Creo que esta pregunta todavía podría beneficiarse de una respuesta semánticamente correcto ... que es "no". No se puede declarar un tipo como "sellado a únicamente unidades externas".

No me malinterpreten: La respuesta de DTB es una buena. Un constructor interno es el más cercano que puede obtener de los resultados deseados.

Sin embargo, creo que cualquiera que lea esto debe ser consciente de que en este ejemplo, no sería MyClass ser descrito como de ser sellado en tiempo de ejecución. Es poco probable que esto volverá a ser un problema, pero si puede causar la lógica basada en la reflexión (de su código o una biblioteca tercera parte) para actuar de manera diferente en este tipo particular. Es algo a tener en cuenta.

Y ahora, para ampliar aún más el código de ejemplo de DTB:

public class MyClass
{
    internal MyClass() { }

    // This factory method will be accessible from external assemblies, making your class instantiable yet still "sealed"
    public static MyClass Create()
    {
        return new MyClass();
    }
}

De esta manera usted todavía puede crear instancias de MyClass desde fuera del montaje de poseer, sin dejar de mantener el control sobre la herencia.

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