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 が 1 年かかるようにコンストラクターを作成します。

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 に答える