0

私はこのクラスを親クラスとして持っています:

public partial class GetStuffResult
{

    private int _Id;

    private string _Name;

    public GetStuffResult()
    {
    }

    [Column(Storage="_Id", DbType="INT NOT NULL")]
    public int Id
    {
        get
        {
            return this._Id;
        }
        set
        {
            if ((this._Id != value))
            {
                this._Id = value;
            }
        }
    }

    [Column(Storage="_Name", DbType="NVarChar(100)")]
    public string Name
    {
        get
        {
            return this._Name;
        }
        set
        {
            if ((this._Name != value))
            {
                this._Name = value;
            }
        }
    }
}

これは、追加のメソッドを除いて同じメソッドを持つ基本クラスです。

public partial class GetStuffResult1
{
    private int _Score;

    private int _Id;

    private string _Name;

    public GetStuffResult1()
    {
    }

    [Column(Storage="_Score", DbType="INT NOT NULL")]
    public int Id
    {
        get
        {
            return this._Score;
        }
        set
        {
            if ((this._Score != value))
            {
                this._Score = value;
            }
        }
    }

    [Column(Storage="_Id", DbType="INT NOT NULL")]
    public int Id
    {
        get
        {
            return this._Id;
        }
        set
        {
            if ((this._Id != value))
            {
                this._Id = value;
            }
        }
    }

    [Column(Storage="_Name", DbType="NVarChar(100)")]
    public string Name
    {
        get
        {
            return this._Name;
        }
        set
        {
            if ((this._Name != value))
            {
                this._Name = value;
            }
        }
    }
}

以前に継承を行ったことがありますが、このシナリオでどのように機能するか完全に混乱していますか? GetStuffResult を継承してその 2 つのメソッドを使用し、GetStuffResult1 で同じコードを 2 回コピーして貼り付ける必要がないようにするにはどうすればよいですか。私は.net 3.5が初めてで、まだそれを学ぼうとしているので、誰かがコードで例を挙げていただければ幸いです。

4

1 に答える 1

1

あなたの質問を正しく理解できたかどうかわかりません。( Id プロパティを 2 回定義しているため、現在のコードはコンパイルしないでGetStuffResult1ください。)から継承する場合は、次のGetStuffResultようにします ( Inheritanceを参照)。

public partial class GetStuffResult1 : GetStuffResult
    {
        private int _Score;  

        public GetStuffResult1()
        {
        }

        [Column(Storage = "_Score", DbType = "INT NOT NULL")]
        public int Id
        {
            get
            {
                return this._Score;
            }
            set
            {
                if ((this._Score != value))
                {
                    this._Score = value;
                }
            }
        }


    }

子クラスから_Idandを削除したことに注意してください。_Nameただし、これにより次の警告が表示されます。

GetStuffResult1.Id' は、継承されたメンバー 'ThreadConsoleApp.GetStuffResult.Id' を非表示にします。非表示が意図されている場合は、new キーワードを使用します。

部分クラスの使用について混乱していて、複数のソースファイルで単一のクラスが必要な場合、私があなたの質問について考えている2番目のこと。その場合、部分キーワードを使用できます。その場合、継承が必要ない場合は、クラスに単一の名前を使用する必要があります。例えばGetStuffResult。その特定のケースでは、次のGetStuffResult1ようになります。

public partial class GetStuffResult
    {
        private int _Score;  

        public GetStuffResult1()
        {
        }

        [Column(Storage = "_Score", DbType = "INT NOT NULL")]
        public int Id
        {
            get
            {
                return this._Score;
            }
            set
            {
                if ((this._Score != value))
                {
                    this._Score = value;
                }
            }
        }


    }

これは、結合されたすべてのプロパティを持つ単一のクラスを持つことに似ています。

編集:

子クラスの基本クラス プロパティにアクセスするには、 base キーワードを使用できます。

    base.Id = 0;
    base.Name = "SomeName";

のオブジェクトから基本クラスのプロパティにアクセスするGetStuffResult1には、次の例を参照してください。

    GetStuffResult1 gsr1 = new GetStuffResult1();
    gsr1.Id = 0;
    gsr1.Name = "SomeName";

これは基本クラスのものです。より明確にするために、基本クラスまたは子クラスのいずれかでgsr1.Name別の名前を使用できます。Id

于 2012-07-25T03:52:35.597 に答える