-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

如果您可以访问 B 类,那么我相信做您想做的事情的唯一方法是创建somevar一个全局变量,该变量将在构造函数中初始化。

您可能可以通过反射解决此问题,但您似乎更有可能有代码气味,真正的问题在于设计,而不是实现。

于 2013-03-12T13:13:34.700 回答
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 回答