0

我有一个Array这个AutoMobiles 数组可能包含子类对象TruckCar.

如何测试对象类型的数组中的位置?例如:

if(AutoMobileArray[1].IsObject(Car)){}

该类Car有一个独特的访问器

public String BootSpace()

如何使用子类对象访问器?例如:

if(AutoMobileArray[1].IsObject(Car))
{
    BootSpaceLabel.Text = AutoMobileArray[1].BootSpace();
}
4

4 回答 4

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();
}
于 2012-05-09T16:50:57.490 回答
2

好吧,如果我理解正确的话,那就是is运营商:

if(AutoMobileArray[1] is Car)
{
  //Do stuff here
}

要处理子类(子类中定义的访问方法等),您需要强制转换:

if(AutoMobileArray[1] is Car)
{
  Car c = (Car)AutoMobileArray[1];
}
于 2012-05-09T16:52:07.897 回答
2
Car car = AutoMobileArray[1] as Car;
if(car != null)
{
    BootSpaceLabel.Text = car.BootSpace();
}
于 2012-05-09T16:52:36.730 回答
0

您可以简单地使用这样的表达式:

if (AutoMobileArray[1] is Car)
{
    BootSpaceLabel.Text = AutoMobileArray[1].BootSpace();
}

尽管有一些解决方法如何不使用“is”关键字,例如,您可以在AutoMobile类中定义方法,如下所示:

virtual string BootSpace()
{ 
    return string.Empty; 
}

或者

abstract string BootSpace();

以及overrideCar 子类(和其他子类,根据您的业务逻辑)中的此方法:

override string BootSpace()
{
    //Car bootspace logic here 
}

之后,您可以简单地调用BootSpaceLabel.Text = AutoMobileArray[1].BootSpace();而不检查对象类型;

处理这个问题的更高级和“漂亮”的方法是使用“设计模式”。有许多标准设计问题得到了有效解决。它们被称为设计模式。在您的情况下,策略模式可能很有用。http://en.wikipedia.org/wiki/Strategy_pattern

于 2012-12-09T15:07:55.377 回答