如果我有这两个类
class Car
{
public int maxSpeed;
}
class Minivan : Car
{
maxSpeed = 100; //error
public void Test()
{
maxSpeed = 100;//ok!
}
}
为什么它只允许在一个方法而不是类体中使用基类的公共成员?
答案 0 :(得分:4)
为什么只允许在一个方法而不是类体中使用基类的公共成员?
你正在考虑这个错误的方法。
辅助功能规则不会使此行为违法;无论可访问性如何,都是违法的。
您违反的规则是语句必须出现在方法,属性,构造函数,析构函数,索引器,运算符或事件的主体中。在您的第一个代码示例中,语句出现在所有这些语句之外,而在第二个代码示例中,它出现在方法中。
同样,此规则没有任何与可访问性有关。它是您违反的语言的语法规则,而不是语义规则。
这应该回答你的问题,但让我们来看看你的代码。写这个的更好方法是:
file = open("item_index.txt", "r", encoding="utf8")
template = """\
{sk1}
{{
"paint" "{sk0}"
"wear" "0.000000000000000001"
"quality" "3"
}}
"""
with open("config.cfg", "w") as config:
config.write('"Paints"\n{\n')
for skin in sorted(file):
new_skin = skin.split(":")
config.write(template.format(sk0=new_skin[0].strip(), sk1=new_skin[1].strip(), wear=wear)
config.write("}")
为什么这样更好?
答案 1 :(得分:0)
class Minivan : Car
{
maxSpeed=100; //error
}
不适合任何地方,它不是班级的成员,它甚至没有类型。它是什么?
如果要在子类中初始化基类的属性,可以使用constructor。
class Car
{
Car()
{
maxSpeed = 100;
}
}
如果您需要将maxSpeed的值传递给您创建的每辆汽车,您可以创建多个构造函数并chain them
答案 2 :(得分:0)
您在类中定义的是字段,您在方法中声明的是变量。它们可能看起来相同,但它们之间存在差异。就像你不能对变量使用访问修饰符,但你可以使用字段。字段和属性之间也存在狭缝差异,属性在类容器中公开标记为私有的字段。因此,您不能互换使用它们,这意味着您无法使用字段代替变量。在你的情况下,maxspeed是一个字段,你就像一个变量一样使用它。
class Minivan : Car
{
//Inside a method
public void Test()
{
maxSpeed = 100;
}
//Inside a constructor
public Minivan(int _maxSpeed)
{
maxSpeed = _maxSpeed;
}
//Inside a property
public int MaxSpeed
{
get { return maxSpeed; }
set { maxSpeed = value; }
}
}
因此,如果你想使用该字段,请在方法或构造函数内或属性内使用它。希望它有所帮助。如果有任何疑问,请随时发表评论。