C# Interface<T> { T Func<T>(T, t);} : Interfaces Génériques avec Paramétrée Méthodes Génériques Types de Retour

J'ai pensé que je pourrais utiliser certains (ce que je croyais) simple génériques à appliquer CRUD sur certaines Classes d'Affaires.
par exemple.

public interface IReadable <T>
{
    T Read<T>(string ID);
}

et puis, peut-être, je pourrais avoir un NoteAdapter faire CRUD avec la Note de la classe, par exemple.

public class NoteAdapter : IReadable<Note>
{
    public Note Read<Note>(string ID) {
        return new Note();
    }
}

Mais pour une raison quelconque, te compilateur est de se confondre si j'ai à la fois un générique Type de retour et une fonction Paramétrée avec le même Type générique. C'est , si je fais :

public interface IReadable <T>
{
    void Read<T>(string ID);
}
public class NoteAdapter : IReadable<Note>
{
    public void Read<Note>(string ID) {
        return new Note();
    }
}

Il compile fine, bien qu'il ne marche pas faire ce que je veux !
Aussi, ce :

public interface IReadable <T>
{
    T Read (string ID);
}
public class NoteAdapter : IReadable<Note>
{
    public Note Read(string ID) {
        return new Note();
    }
}

fonctionne très bien ainsi, lui aussi Bien qu'elle ne satisfait pas aux exigences ! - Pourquoi ?
Parce que je peux pas avoir une Classe qui implémente un tas de ces Interfaces ..par exemple.

public interface IReadable <T>{
    T Read (string ID);
}
public class UniversalAdapter : IReadable<Note>, IReadable<Customer> ...
{
    public Note Read(string ID) {
        return new Note();
    }
    public Customer Read(string ID) {
        return new Customer();
    }
}

Coz, cela ne serait pas compiler comme type de retour ne font pas partie des méthodes de signature !

J'ai eu l'impression, en C# 3.5 +

T Foo(T t);
T Foo<T> (T t);
T Foo(<SomeType> someInstance);

Tous ont des signatures différentes! Ce qui me manque ici ?

InformationsquelleAutor IM. | 2009-10-26