我有一个方法,该方法获取基类类型的变量,但是我将子类的变量传递给此方法。
简单的例子:
public class Shape {
public string Color {get;set;}
}
public class Square : Shape {
public int Corners {get;set;}
}
public class Circle : Shape {
public int Radius {get;set;}
}
某些方法如下:
public void GetDetails(Shape item){
// do something
}
然后,我将子类对象传递给此方法:
var sq = new Square();
var cir = new Circle();
var corners = GetDetails(sq);
var radius = GetDetails(cir);
题:
该方法如何检测实际出现了什么类型?假设在foreach周期中我遍历了List,所以我不知道每个项目的实际类型(正方形或圆形)。
我的实际问题是:
我将不同的子类类型变量打包到基本类类型列表中。然后,我将此列表发送给一个方法,并在其中获取每个类的所有属性。我通过“反射”实现它,但是方法.GetProperties()仅返回基类的属性,但是我还需要派生类的属性。
您应该GetType()
用来获取对象的动态(实际)类型:
public void GetDetais(Shape item)
{
var properties = item.GetType().GetProperties();
}
如果使用typeof()
,则将始终使用编译时间类型Shape
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句