-2

私は約300の関数を持っており、それぞれのラッパーを作成する必要はありません。

class B
{
    func(vartype somevar, int otherparam)
    {
        //code
    }
}

それなら私はこれをしたい

class A:B(vartype somevar)
{
    Asfunc2()
    {
        this->func(1);  //basically somevar would already be filled in when called and it'd just need the 1 param.
    }
}
4

3 に答える 3

1

次のように基本コンストラクターを呼び出すことができます。

public class Manager : Employee
{
    public Manager(int annualSalary)
        : base(annualSalary)
    {
        //Add further instructions here.
    }
}

参照はこちらです。

あなたが説明したことは、JavaScript で関数パラメーターをバインドするように見えますが、私の知る限り、C# では不可能です。

于 2013-03-12T12:43:25.860 に答える
0

あなたが説明した状況について考えていて、次の linqpad スクリプトを使用して、これが何を意味するかを調べていました。

void Main()
{
    B b = new B();
    b.CallA().Dump();
}


class A
{
    public string CallA(string someVar)
    {
       return string.Format("{0} says Hello", someVar);
    }
}

class B : A
{
    public string CallA(string someVar = null)
    {
       return base.CallA(someVar);
    }
}

基本的に、オーバーロードされた CallA メソッドになります。このはベタベタします。B のインスタンスを作成した後に Main メソッドで実行する次のコードはどうでしょうか。

((A)b).CallA();  //You actually want to call A.CallA

これはまだ呼び出しますb.CallA()

ただ気をつけてください。これは良いデザインとは思えません。

于 2013-03-12T13:06:15.803 に答える
0

クラス B にアクセスできる場合、必要なことを行う唯一の方法はsomevar、コンストラクターで初期化されるグローバル変数を作成することだと思います。

リフレクションでこれを回避できるかもしれませんが、コードの匂いがする可能性が高く、実際の問題は実装ではなく設計にあります。

于 2013-03-12T13:13:34.700 に答える