2

テーブルとデータ行に次の構造があります。

Public Class MyDataTable(Of MyDataRowDerived)

Public Class MyDataRowBase(Of DataRow)
    Public Property MyDescription As String

Public Class MyDataRowDerived(Of MyDataRowBase)
  inherits MyDataRowBase
    Public overrides Property MyDescription As String

テーブルから行を作成すると、それはタイプMyDataRowDerivedですが、オーバーライドされたプロパティを使用したくなく、基本クラスのように単純なものだけを使用します。そして、この方法でそれを達成しようとしました:

Dim row As MyDataRowBase = CType(myTable.AddNew(), MyDataRowBase)
Dim retrievedDescription = row.MyDescription

私はこの方法でオブジェクトにそれが単なる基本クラスであると信じさせることを強制しますが、それはまだ私のdeviredクラスのプロパティを使用しています.

オブジェクトによって返される説明は、派生クラスで実装されているとおりですが、基本クラスの説明が必要です

ソリューションはC#でも追加できますが、問題ありません;)

4

3 に答える 3

1

あなたが探していることはできないと思います。オーバーライドとは、基本クラスの機能を置き換えることです。派生クラスから基底クラスのメンバーにアクセスできますが、外部クラスからはアクセスできません。

できることは、派生クラスに新しいプロパティを追加して、基本クラスの機能を別の名前で公開することです。

public class MyDataRowBase : DataRow
{
  public virtual string MyDescription { get; set; }
}

public class MyDataRowDerived : MyDataRowBase
{
  public override string MyDescription { ... }

  public string BaseMyDescription
  {
    get { return base.MyDescription; }
    set { base.MyDescription = value; }
  }
}

次にBaseMyDescription、外部クラスからベース プロパティの値にアクセスする場合に使用できます。

ただし、このようなことをしたいと思うのはかなり珍しいことです。あなたが達成しようとしていることについてもう少し情報を提供すると、人々がいくつかの良い提案をする可能性があります.

于 2013-05-07T06:57:53.097 に答える
1

あなたが正確に求めているものはあまり明確ではありませんが、

あなたが持っている場合

public class Base {
    public string SomeProperty {get;set;}
}

public class Deived : Base {
    public void SomeMethod() {
        this.SomeProperty; //It's the same property available in base class 

        /**If the base property is virtual and you overriden in Derived 
           write base.SomeProperty **/
    }
}

これがあなたが求めているものでない場合は、明確にしてください。

于 2013-05-07T06:34:10.317 に答える