访问“父母”属性

时间:2016-11-17 19:08:56

标签: c# inheritance eiffel

这可能是一个愚蠢的问题,但我是C#的新手。我想知道是否有一种方法可以在子类中直接使用父类的属性。我做了很多埃菲尔,当一个类被一个或多个类继承时(因为埃菲尔没有接口,你可以继承多个类)。

就像那样的例子:(埃菲尔特朗格)

父类:

class Parent

features
    int id
    string lastName

儿童班:

class Child inherit

    PARENT

feature
    bool isChild

在这种情况下,Child类已经可以访问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;
    }

}

所以我的问题是,有没有办法直接获取C#中父类的属性,就像埃菲尔?

2 个答案:

答案 0 :(得分: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;
    }
}

然后,您可以使用子类中的受保护字段。

答案 1 :(得分: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属性,这仍将保护实际字段,但允许继承的类更改属性的行为。