2

私のフォームでは、次のものがあります...

if (productNo == this.product1.ProductNumber)  //ProductNumber comes from Product class
                {
                    //if so, set the other values of the text boxes to that of the 
                    //product in memory
                    tbDescription.Text = product1.ProductDescription; //Works - from Product class
                    tbOnHand.Text = product1.NumberOnHand.ToString(); //Works - from Product class
                    tbUnitOfMeasure.Text = product1.UnitOfMeasure;    //Works - from Product class

                    tbVendorID.Text = product1.VendorID; // Doesn't work - from derived ManufacturedProduct class 
                }

VendorID は、Product から派生したクラスである ManufacturedProduct クラスから取得されます。コードの最後の行は、機能しないものです。tbVendorID に product1.VendorID (ちなみに int) の値を入力できるようにしたい

次のエラーが表示されます...Objects.Product に 'VendorID' の定義が含まれておらず、タイプ 'Objects.Product' の最初の引数を受け入れる拡張メソッド 'VendorID' が見つかりませんでした (using ディレクティブまたはアセンブリ参照?)

4

2 に答える 2

1

ManufacturedProduct子クラスのプロパティにアクセスする場合は、次のようにキャストする必要があります。

ManufacturedProduct mfgProduct = (ManufacturedProduct) product1;
if (productNo == mfgProduct.ProductNumber)  
{
    tbDescription.Text = mfgProduct.ProductDescription;  
    tbOnHand.Text = mfgProduct.NumberOnHand.ToString();  
    tbUnitOfMeasure.Text = mfgProduct.UnitOfMeasure;    
    tbVendorID.Text = mfgProduct.VendorID;  
}
于 2012-11-20T08:40:59.990 に答える
0

次のことができます。

if (productNo == this.product1.ProductNumber)  //ProductNumber comes from Product class
{
        tbDescription.Text = product1.ProductDescription; 
        tbOnHand.Text = product1.NumberOnHand.ToString(); 
        tbUnitOfMeasure.Text = product1.UnitOfMeasure;    
        if(priduct1 is ManufacturedProduct)
               tbVendorID.Text = ((ManufacturedProduct)product1).VendorID.ToString(); 
}
于 2012-11-20T08:57:14.367 に答える