Beh, credo che dovrebbe essere consentito in caso di parametro di tipo generico. Probabilmente ha semplificato la classe contrattuale singleton. Ecco un esempio:
public interface IEntity {
// some constrains...
DataRow ObjToRow(object obj);
object RowToObj(DataRow dr);
}
//T would be any class inherites from IEntity with default contructor signature.
public interface IMyContract {
T read<T>() where T : IEntity;
void write<T>(T object) where T : IEntity;
}
//everything in the class is static
public static class SqlProvider : IMyContract {
public static T read<T>() where T: IEntity {
DataRow dr = [reading from database]
return T.RowToObj(dr);
}
//compile error here....
public static void write<T>(T obj) where T : IEntity {
DataRow dr = T.ObjToRow(obj);
[ ... commit data row dr to database ... ]
}
}
public static class MyAppleEntity : IEntity {
[... implement IEntity contract normally ... ]
}
public static class MyOrangeEntity : IEntity {
[... implement IEntity contract normally ... ]
}
public class MyTest {
void reading() {
MyAppleEntity apple = SqlProvider.Read<MyAppleEntity>();
MyOrangeEntity orange = SqlProvider.Read<MyOrangeEntity>();
SqlProvider.write<MyAppleEntity>(apple);
SqlProvider.write<MyOrangeEntity>(orange);
}
}
L'unica volta un riferimento tipo è implicitamente nel SqlProvider.read() e scrivere() e T è un'identità ben al punto di invoke. Senza l'implementazione statica dell'interfaccia sono costretto a scrivere in questo modo.
public class MyAppleEntity : IEntity {
[... implement IEntity contract normally ... ]
}
.....
public T read<T>() where T: IEntity, new() {
DataRow dr = [reading from database]
return new T().RowToObj(dr);
}
Molto poco diverso ma non altrettanto elegante.
Non ha senso. Come implementeresti l'interfaccia in una classe derivata di XXX? Non c'è motivo per cui non puoi chiamare il membro statico dall'implementazione comunque. – leppie
http://stackoverflow.com/questions/259026/why-doesnt-c-allow-static-methods-to-implement-an-interface – bernhof
@leppie, si ** potrebbe ** avere un "metodo tipo"; dove non c'era un implicito 'questo 'ma risolveva il metodo in fase di esecuzione dal tipo. Le rare occasioni in cui le usiamo possono essere soddisfatte con metodi di istanza o riflessione, quindi non c'è bisogno urgente di IMO. –