Он не компилируется, потому что T может быть чем угодно, и не у всех будет поле myvar
.
Вы можете сделать myvar
свойством ITest
:
public ITest
{
string myvar{get;}
}
и реализуйте его на классах как свойство:
public class MyClass1 : ITest
{
public string myvar{ get { return "hello 1"; } }
}
, а затем наложите общее ограничение на ваш метод:
public void PrintGeneric<T>(T test) where T : ITest
{
Console.WriteLine("Generic : " + test.myvar);
}
но в этом случае, если честно, вылучше просто пройти в ITest:
public void PrintGeneric(ITest test)
{
Console.WriteLine("Generic : " + test.myvar);
}