0

我在设置属性时遇到了麻烦,并意识到我只能在函数或方法中设置属性。我的问题是为什么会这样?

这是我的有效代码:

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
}
4

5 回答 5

5

语言规范(大部分)禁止在类级别执行任意语句。所能做的就是为类的静态或实例成员指定默认值。

一般来说,所有代码都必须在类的方法中执行。

正如 AntLaC 提到的,您可以通过使用对象初始化语法指定值来解决此问题。由于可以在类级别定义对象(作为“静态或实例成员的默认值”),因此使用如下语法也可以:

public class SomeClass
{
    Car car = new Car() {
        year = 2012;
    };
}
于 2012-11-02T15:26:43.967 回答
4

因为这是语言规范要求的方式。

想象一下,如果可以在任何你喜欢的地方编写任何东西,将会发生什么混乱:我们最终会使用 PHP,而这当然不是C# 的设计目标。

于 2012-11-02T15:24:55.587 回答
3

如果你想设置特定的属性,你可以在没有方法的情况下尝试这个

Car car = new Car()
          {
             year = 2012
          };
于 2012-11-02T15:24:49.413 回答
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;
    }
}    
于 2012-11-02T15:27:12.000 回答
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);
}
于 2012-11-02T15:25:42.880 回答