و یا :
public abstract class AbsClass<T> where T:class
{
public abstract List<T> SelectAll();
}
internal class my1 :AbsClass<my1>
{
public int x;
public override List<my1> SelectAll()
{
return new List<my1>{this};
}
}
internal class my2 : my1
{
public int y;
public override List<my1> SelectAll()
{
return new List<my1>{this};
}
}
تست :
my1 m1 = new my1();
m1.x = 10;
my2 m2 = new my2();
m2.x = 20;
m2.y = 100;
m2.SelectAll().ForEach(x => MessageBox.Show(x.x.ToString()
+ "\n" + (x as my2).y.ToString()
));
بدون جنریک :
public abstract class AbsClass
{
public abstract List<AbsClass> SelectAll();
}
internal class my1 :AbsClass
{
public int x;
public override List<AbsClass> SelectAll()
{
return new List<AbsClass>{this};
}
}
internal class my2 : my1
{
public int y;
public override List<AbsClass> SelectAll()
{
return new List<AbsClass>{this};
}
}
تست :
my1 m1 = new my1();
m1.x = 10;
my2 m2 = new my2();
m2.x = 20;
m2.y = 100;
m2.SelectAll().ForEach(x => MessageBox.Show((x as my2).x.ToString()
+ "\n" + (x as my2).y.ToString()
));