我在设置属性时遇到了问题,并意识到我只能在函数或方法中设置属性。我的问题是为什么会这样?
这是我的代码:
public class SomeClass
{
Car car = new Car();
public Car JustAMethod()
{
Car car = new Car();
car.year = 2012;
return car;
}
}
为什么这不起作用:
public class SomeClass
{
Car car = new Car();
car.year = 2012;//I get an error here
}
答案 0 :(得分:5)
语言规范(大部分)禁止在类级别执行任意语句。所有可以做的就是为类的静态成员或实例成员指定默认值。
一般来说,所有代码都必须在类的方法中执行。
As AntLaC mentioned,你可以通过使用对象初始化语法指定值来解决这个问题。由于可以在类级别定义对象(作为“静态或实例成员的默认值”),因此使用如下语法也可以起作用:
public class SomeClass
{
Car car = new Car() {
year = 2012;
};
}
答案 1 :(得分:4)
因为这是语言规范要求的方式。
想象一下如果可以在任何你喜欢的地方写任何东西就会发生的混乱: 我们最终得到了PHP,这肯定是不是 C#的设计目标。
答案 2 :(得分:3)
如果要设置特定属性,可以在不使用方法的情况下尝试此操作
Car car = new Car()
{
year = 2012
};
答案 3 :(得分:1)
简单的答案是,这些只是语言的规则。但是,您有几个选择:
创建一个构造函数,以便Car需要一年时间:
public class SomeClass
{
Car car = new Car(2012);
}
使用对象初始值设定项:
public class SomeClass
{
Car car = new Car() { Year = 2012 };
}
Use a method:
public class SomeClass
{
Car car = InitializeCar(2012);
private Car InitializeCar(int year)
{
Car car = new Car();
car.Year = 2012;
return car;
}
}
答案 4 :(得分:0)
您不能以这种方式设置属性,不允许。您可以在构造函数/方法/属性中执行此操作。或者以这种方式:
public class SomeClass{
Car car = new Car(){ year = 2012 };
}
或者您可以将值传递给构造函数:
public class Car{
public int year;
public Car(int year){
this.year = year;
}
}
和
public class SomeClass{
Car car = new Car(2012);
}