0

この配列にはサブクラスオブジェクトまたはが含まれArrayている可能性があります。AutoMobilesTruckCar

オブジェクトのタイプについて配列内の位置をテストするにはどうすればよいですか?例えば:

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();

そしてoverride、Carサブクラス(およびyoutビジネスロジックによると他のサブクラス)のこのメソッド:

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 に答える