2016-11-17 119 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性能。