为什么我不能在没有方法的情况下设置类对象的属性值?

时间:2012-11-02 15:21:12

标签: c# function object

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

这是我的代码:

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
}

5 个答案:

答案 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);
}