2008-10-08 24 views

Respuesta

75

Depende de lo que quiera decir ser serializable. Si se refiere al marcador CLI (es decir, el atributo [Serializable]), este es no heredado (prueba a continuación). Debe marcar explícitamente cada clase derivada como [Serializable]. Sin embargo, si se refiere a la interfaz ISerializable, entonces sí: las implementaciones de interfaz se heredan, pero debe tener cuidado, por ejemplo, utilizando un método virtual para que las clases derivadas puedan contribuir con sus datos a la serialización.

using System; 

class Program 
{ 
    static void Main() 
    { 
     Console.WriteLine(typeof(Foo).IsSerializable); // shows True 
     Console.WriteLine(typeof(Bar).IsSerializable); // shows False 
    } 
} 

[Serializable] 
class Foo {} 

class Bar : Foo {} 
+0

Los atributos, por su naturaleza, no se heredan. Además, no se puede considerar que una clase hereda de un atributo. Ergo, los atributos no tienen nada que ver con la pregunta del OP. – NotMe

+17

Lo siento, pero estás equivocado. Los atributos * do * se relacionan con la pregunta; el atributo [Serializable] es uno de los que el compilador maneja de manera diferente: usa esto para establecer el indicador "serializable" en la clase CLI (si comprueba el IL, realmente descarta el atributo en este punto). –

+4

Igualmente, nunca he dicho nada sobre la clase que hereda de un atributo, aunque en realidad, dado que los atributos * son * clases y los atributos pueden heredarse uno del otro, una clase de atributo hereda mucho de un atributo ... –

Cuestiones relacionadas