View Full Version : [C#] Passare a un metodo solo oggetti serializzabili
astorcas
04-03-2008, 09:45
Come da titolo, è possibile?
Credevo che scrivendo
mioMetodo(System.Runtime.ISerializable obj)
avrebbe funzionato ma non sembra, qualche suggerimento?
Einstein
04-03-2008, 11:11
Il metodo che hai adottato funziona solo se la classe implementa l'interfaccia ISerializable, quindi ti basta implementare la serializzazione della classe tramite quell'interfaccia.
astorcas
04-03-2008, 11:24
Il metodo che hai adottato funziona solo se la classe implementa l'interfaccia ISerializable, quindi ti basta implementare la serializzazione della classe tramite quell'interfaccia.
Si ma io vorrei che il metodo accettasse non solo le mie classi, ma tutte quelle che in c# sono serializzabili :(
Einstein
04-03-2008, 13:50
Puoi rendere una classe serializzabile in due modi:
1. Aggiungi l'attributo [Serializable] alla classe (simple serialization)
2. Implementi ISerializable
per vedere se la classe ha l'attributo [Serializable] devi usare Reflection, in questo modo:
Type tipoMiaClasse = typeof(MiaClasse);
object[] attributes = tipoMiaClasse.GetCustomAttributes(typeof(SerializableAttribute), false);
if (attributes.Length > 0)
{
// La classe ha l'attributo Serializable
}
Per vedere se la classe implementa l'interfaccia ISerializable ti basta un controllo del tipo:
if (miaClasse is ISerializable) { ... }
astorcas
04-03-2008, 14:30
Puoi rendere una classe serializzabile in due modi:
1. Aggiungi l'attributo [Serializable] alla classe (simple serialization)
2. Implementi ISerializable
per vedere se la classe ha l'attributo [Serializable] devi usare Reflection, in questo modo:
Type tipoMiaClasse = typeof(MiaClasse);
object[] attributes = tipoMiaClasse.GetCustomAttributes(typeof(SerializableAttribute), false);
if (attributes.Length > 0)
{
// La classe ha l'attributo Serializable
}
Per vedere se la classe implementa l'interfaccia ISerializable ti basta un controllo del tipo:
if (miaClasse is ISerializable) { ... }
Interessante, ma non c'è un modo per impedire a tempo di compilazione che l'oggetto passato non sia serializzabile?
Einstein
04-03-2008, 20:48
Che io sappia non è possibile, a compile time, sapere se una classe è "decorata" con un particolare attributo, ma puoi solo sapere se una classe implementa l'interfaccia ISerializable.
astorcas
05-03-2008, 00:15
Che io sappia non è possibile, a compile time, sapere se una classe è "decorata" con un particolare attributo, ma puoi solo sapere se una classe implementa l'interfaccia ISerializable.
Peccato.... in java invece per sapere se un oggetto è serializzabile basta vedere se implementa Serializable vero?
Einstein
05-03-2008, 08:50
Hmmm... Mi cogli impreparato... :D Non conosco Java. ;)
^TiGeRShArK^
05-03-2008, 10:06
Peccato.... in java invece per sapere se un oggetto è serializzabile basta vedere se implementa Serializable vero?
yep! :p
astorcas
06-03-2008, 10:04
MI sembra assurdo che non ci sia un modo per controllare a compile time che un oggetto sia serializzabile o meno..... nessuno può aiutarmi? :cry:
astorcas
12-03-2008, 12:59
uppo.... non si sa mai :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.