2016-11-17 161 views
0

這可能是一個愚蠢的問題,但我是C#的新手。我想知道是否有一種方法直接在子類中使用父級的屬性。我做了很多埃菲爾,當一個類被一個或多個類繼承時(因爲是埃菲爾沒有接口,你可以繼承多個類)。訪問父母屬性

就這樣爲例:(艾菲爾langage)

父類:

class Parent 

features 
    int id 
    string lastName 

子類:

class Child inherit 

    PARENT 

feature 
    bool isChild 

在這種情況下,兒童類已經有訪問ID和lastName並且可以直接設置爲Child屬性的一部分,不必創建Parent。

但到目前爲止,我做了這個(C#langage):

父類:

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

} 

所以有我的問題,是有辦法像Eiffel一樣直接在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; 
    } 

} 

有沒有辦法讓像Eiffel一樣直接訪問父類的C#屬性?

如果您沒有爲類成員指定可訪問性,那麼默認情況下它們是private,這意味着它們只能在類本身內訪問。所以最簡單的改變是讓他們protected

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

一個更好解決方案可能是在田間地頭,這將仍然保護的實際領域,但允許繼承類改變性質的行爲上添加protected性能。