这可能是一个愚蠢的问题,但我是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#中父类的属性,就像埃菲尔?
答案 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
属性,这仍将保护实际字段,但允许继承的类更改属性的行为。