Мне нужно создать файл dll, который содержит все интерфейсы классов, но не содержит никакого класса. Поскольку я использую эти интерфейсы для многих классов это должно быть так:Реализация свойств интерфейса в интерфейсах
public interface IClassA
{
string Word { get; }
}
public interface ITest<TClassA> where TClassA : IClassA
{
TClassA A { get; }
}
Пример из двух классов, которые реализуют эти интерфейсы, как я хочу:
public class ClassA : IClassA
{
public string Word
{
get;
private set;
}
public string Sentence
{
get;
private set;
}
public ClassA(string word, string sentence)
{
this.Word = word;
this.Sentence = sentence;
}
}
public class Test : ITest<ClassA>
{
public ClassA A
{
get;
private set;
}
public Test(ClassA a)
{
this.A = a;
}
}
И я хочу сделать что-то как и в основной программе:
public static void Main(string[] args)
{
ClassA a = new ClassA("hey", "hey world!");
Test t = new Test(a);
Print((ITest<IClassA>)t);
}
public static void Print(ITest<IClassA> t)
{
Console.WriteLine(t.A.Word);
}
Но это литье: (ITest<IClassA>)t
делает ошибку во время выполнения. Как я могу это решить? спасибо!
Я хочу, чтобы класс Test, чтобы иметь свойство ClassA и не IClassA, это не возможно? – Gal1014
Да, это так. Посмотрите @Thomas [ответ] (http://stackoverflow.com/a/40069043/594832): Если 'ITest' является ковариантным, это возможно: https://dotnetfiddle.net/KKkktG –
khlr