我有Array
AutoMobiles
此数组可能包含子类对象Truck
或Car
。
如何在数组中测试对象类型的位置? 例如:
if(AutoMobileArray[1].IsObject(Car)){}
Car
类具有唯一的访问者
public String BootSpace()
如何使用SubClass对象访问器? 例如:
if(AutoMobileArray[1].IsObject(Car))
{
BootSpaceLabel.Text = AutoMobileArray[1].BootSpace();
}
答案 0 :(得分:2)
if(AutoMobileArray[1] is Car){ }
is
运营商:http://msdn.microsoft.com/en-us/library/scekt9xw(v=vs.71).aspx
然后您可以转换为适当的类型:
if(AutoMobileArray[1] is Car)
{
Car car = (Car)AutoMobileArray[1];
BootSpaceLabel.Text = car.BootSpace();
}
答案 1 :(得分:2)
好吧,如果我理解正确,那就是is
运营商:
if(AutoMobileArray[1] is Car)
{
//Do stuff here
}
要使用子类(子类中定义的访问方法等)进行操作,您需要强制转换:
if(AutoMobileArray[1] is Car)
{
Car c = (Car)AutoMobileArray[1];
}
答案 2 :(得分:2)
Car car = AutoMobileArray[1] as Car;
if(car != null)
{
BootSpaceLabel.Text = car.BootSpace();
}
答案 3 :(得分:0)
您可以简单地使用这样的表达式:
if (AutoMobileArray[1] is Car)
{
BootSpaceLabel.Text = AutoMobileArray[1].BootSpace();
}
虽然有一些解决方法,但如何不使用“is”关键字,例如您可以在AutoMobile
类中定义方法,如下所示:
virtual string BootSpace()
{
return string.Empty;
}
或
abstract string BootSpace();
和override
这个方法在Car子类中(和其他子类,根据你的业务逻辑):
override string BootSpace()
{
//Car bootspace logic here
}
之后,您只需调用BootSpaceLabel.Text = AutoMobileArray[1].BootSpace();
而无需检查对象类型;
更高级和“漂亮”的方法来处理这个问题就是使用“设计模式”。有许多标准设计问题得到有效解决。它们被称为设计模式。在您的情况下,战略模式可能很有用。 http://en.wikipedia.org/wiki/Strategy_pattern