2016-11-17 8 views
0

これは愚かな質問かもしれませんが、私はC#の初心者です。子クラスで親の属性を直接使用する方法があるのだろうかと思います。私は多くのエッフェルを行い、クラスが1つまたは複数のクラスによって継承されたとき(はい、エッフェルには複数のクラスを継承することができるインターフェースがありません)。ちょうどそのexempleよう親属性へのアクセス

:(エッフェルの関連リンク言語)

親クラス:

class Parent 

features 
    int id 
    string lastName 

子供クラス:

class Child inherit 

    PARENT 

feature 
    bool isChild 

その場合には、子クラスは、既にIDとlastNameへのアクセスを得ました子属性の一部として直接設定することができ、親を作成する必要はありません。

しかし、これまでのところ、私はこの(C#の関連リンク言語)製:

親クラス:

public class Character 
{ 
    Int32 Id; 
    String name; 
    List<String> images; 

    public Character() 
    { 
     name = ""; 
     images = null; 
    } 

    public Character(string a_name, List<String> imagePaths) 
    { 
     name = a_name; 
     images = imagePaths; 
    } 

    public Character(Int32 a_id, string a_name, List<String> imagePaths) 
    { 
     Id = a_id; 
     name = a_name; 
     images = imagePaths; 
    } 
} 

子供クラス:

public class NPC : Character 
{ 

    public bool isVender; 

    public NPC() 
    { 
     Character character = new Character(); 
     isVender = false; 
    } 

    public NPC(string a_name, List<String> images) 
    { 
     Character caracter = new Character(a_name, images); 
     isVender = false; 
    } 

    public NPC(string a_name, List<string> images, bool a_bool) 
    { 
     Character caracter = new Character(a_name, images); 
     isVender = a_bool; 
    } 

} 

だから私の質問は、そこにあるへの道がありますエッフェルと同じようにC#の親の属性に直接アクセスできますか?

答えて

0

子クラスで使用するフィールドをprotectedと宣言します。保護された可視性変更子hereの詳細をご覧ください。

public class Character 
{ 
    protected Int32 Id; 
    protected String name; 
    protected List<String> images; 

    public Character() 
    { 
     name = ""; 
     images = null; 
    } 

    public Character(string a_name, List<String> imagePaths) 
    { 
     name = a_name; 
     images = imagePaths; 
    } 

    public Character(Int32 a_id, string a_name, List<String> imagePaths) 
    { 
     Id = a_id; 
     name = a_name; 
     images = imagePaths; 
    } 
} 

次に、子クラスの保護されたフィールドを使用できます。あなた本当にがしたいように見える何

+0

ありがとうございました! –

0

は、C#で、わずかに異なる構文である、基本クラスのフィールドを設定するために、基本クラスのコンストラクタを使用することです:

public class NPC : Character 
{ 

    public bool isVender; 

    public NPC() : base() 
    { 
     isVender = false; 
    } 

    public NPC(string a_name, List<String> images) : base(a_name, images) 
    { 
     isVender = false; 
    } 

    public NPC(string a_name, List<string> images, bool a_bool) : base(a_name, images) 
    { 
     isVender = a_bool; 
    } 

} 

取得する方法がありますエッフェルのようにC#の親の属性に直接アクセスしますか?

クラスメンバーにアクセシビリティを指定しない場合は、デフォルトでprivateになります。つまり、クラス内でのみアクセス可能です。したがって、は最も簡単にに変更することです。protectedです。

public class Character 
{ 
    protected Int32 Id; 
    protected String name; 
    protected List<String> images; 

より良い解決策は、まだ実際のフィールドを保護するが、継承したクラスは、プロパティの動作を変更することができますフィールドの上にprotectedプロパティを追加することであってもよいです。

関連する問題