0

このシナリオを検討してください。

と呼ばれる基本クラスがありclsMainます:

class clsMain
{
    int P1{set; get;}
    int P2{set; get;}
    int P3{set; get;}
    string P4{set; get;}
    string P5{set; get;}
}

そして私はこれらの2つのオブジェクトを以下から取得したいと思いますclsMain

object1 psudo code:
{
    int P1{set; get;}
    int P2{set; get;}
    int P3{set; get;}    
}

と :

object2 psudo code:
{
    int P3{set; get;}
    string P4{set; get;}
    string P5{set; get;}
}

C#で可能ですか?特定のタイプのクラス(抽象、...)を使用する必要がありますか?

どうもありがとう

4

3 に答える 3

1

この場合、基本クラスでは、次のような擬似コードのような共有プロパティのみを残します。

class clsMain
{   
    int P3{set; get;}   
}

class object1 : clsMain
{
    int P1{set; get;}
    int P2{set; get;}   
}

class object2 : clsMain
{    
    string P4{set; get;}
    string P5{set; get;}
}
于 2012-04-11T08:14:58.627 に答える
1

継承は、ファーストクラスの概念としてC#で可能です。

public class BaseClass
{
    public virtual string Name { get { return "Adam"; } }
}

public class ChildClass : BaseClass
{
    public override string Name { get { return "Foo"; } }
}

何かoverrideに、あなたはそれを作る必要がありvirtual、以外のもののアクセシビリティを持っている必要がありますprivate

あなたのインスタンスでは、おそらく次のようなことをすることができます:

class clsMain
{
    public virtual int P1{set; get;}
    public virtual int P2{set; get;}
    public virtual int P3{set; get;}
    public virtual string P4{set; get;}
    public virtual string P5{set; get;}
}

class object1 : clsMain
{
    public override int P1{set; get;}
    public override int P2{set; get;}
    public override int P3{set; get;}    
}

class object2 : clsMain
{
    public override int P3{set; get;}
    public override string P4{set; get;}
    public override string P5{set; get;}
}

正直言って、あなたの質問はあまり明確ではありません。ただし、C#はクラスの多重継承をサポートしていないことに注意してください。

プロパティを除外したいようです。継承されたメンバーへのアクセスを停止することはできません(new修飾子はありますが、これはせいぜい大ざっぱです)。代わりに、インターフェースを使用できます。

interface Iobject1
{
    int P1 { set; get; }
    int P2 { set; get; }
    int P3 { set; get; } 
}

interface Iobject2
{
    int P3{set; get;}
    string P4{set; get;}
    string P5{set; get;}
}

class clsMain : Iobject1, Iobject2
{
    public int P1{set; get;}
    public int P2{set; get;}
    public int P3{set; get;}
    public string P4{set; get;}
    public string P5{set; get;}
}
于 2012-04-11T08:17:04.433 に答える
0

あなたの質問は明確ではありません...C#の2つのオブジェクトから継承することはできません

clsMainにobject1とobject2から継承されたすべてのプロパティを持たせたい場合、実行できることは次のとおりです。

  • object2はobject1から継承します
  • clsMainはobject2から継承します

したがって、clsMainにはobject1とobject2のすべてのプロパティがあります

abstractを使用すると、クラスが直接作成されないように保護するだけです。object1を抽象として配置すると、「var x = newobject1();」を実行できなくなります。

編集:プロパティは保護または公開する必要があると言うのを忘れました。そうしないと、派生クラスからアクセスできません。

于 2012-04-11T08:14:48.973 に答える