方法

2012-04-11 11 views
0

は、このシナリオを検討してください方法

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

を、私はclsMainからこれら2 obejctsを持つようにしたい:

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#で可能ですか?特定の種類のクラス(抽象的な、...)を使用する必要がありますか?たくさん

+0

あなたはそのようなclaves havプロパティを排他的にしたいですか? – Tigran

+0

Tigranの答えは、私に本当に良い見えます。 – Dhananjay

答えて

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;} 
} 
+0

おかえりなさい@Adam Houldsworth。オブジェクト2に基づいてオブジェクトを作成すると、 'clsMAin'プロペティが表示されます.Sqlビューのようなものが必要です – Arian

+0

@Kerezoメンバーを非表示にすることはできません。代わりにできることは、必要なメンバーだけを公開し、代わりにインターフェースに話すインターフェースを作ることです。 –

0

おかげであなたの質問が明確ではありませんあなたはclsMainは、オブジェクト1とオブジェクト2からheritedすべてのプロパティを持っているしたい場合は...あなたは、C#で2物体から

を継承することはできません、どのようなことができますやるです:

  • はobject2は
継承clsMainオブジェクト1
  • から継承OBJECT

    したがって、clsMainはobject1とobject2のすべてのプロパティを持ちます。

    クラスを直接作成するのを防ぐだけです。 object1を抽象として置くと、 "var x = new object1();"を実行することは決してできません。

    編集:プロパティは保護されている必要があり、公開されている必要があります。そうでなければ、派生クラスからアクセスできません。基本クラスでこの場合

  • 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;} 
    } 
    
    +0

    @downvoter:説明する気に? – Tigran

    +0

    は私ではありませんでしたが、あなたの投稿されたコードが有効なC#でないためです。 –

    +1

    @AdamHouldsworth:元のコードはあまりにも:)私はちょうど同じコンセプトに従っていなかった..バー。質問は概念的なので答えはあまりにも.. – Tigran