簡単なコード:
class foo
{
private int a;
private int b;
public foo(int x, int y)
{
a = x;
b = y;
}
}
class bar : foo
{
private int c;
public bar(int a, int b) => c = a * b;
}
Visual Studioはbar
コンストラクターについて不平を言っています:
エラーCS7036
foo.foo(int, int)
の必須の仮パラメーターx
に対応する引数が指定されていません。
何?
問題は、基本クラスfoo
にパラメーターなしのコンストラクターがないことです。したがって、派生クラスのコンストラクターからのパラメーターを使用して、基本クラスのコンストラクターを呼び出す必要があります。
public bar(int a, int b) : base(a, b)
{
c = a * b;
}
私は間違っている可能性がありますが、fooを継承しているため、ベースコンストラクターを呼び出す必要があります。 fooコンストラクターを明示的に定義して(int、int)を要求するので、今度はそれをチェーンに渡す必要があります。
public bar(int a, int b) : base(a, b)
{
c = a * b;
}
これにより、fooの変数が最初に初期化され、次にbarで使用できます。また、混乱を避けるために、インスタンス変数とまったく同じパラメーターに名前を付けないことをお勧めします。代わりにp_aまたは何かを試してください。そうすれば、間違った変数を誤って処理することはありません。