gpt4 book ai didi

来自派生类的 C# 方法作为基构造函数中的委托(delegate)

转载 作者:太空狗 更新时间:2023-10-29 18:23:29 25 4
gpt4 key购买 nike

为什么下面的C#不合法?是否存在适当的解决方法?

public class Base
{
public Base(Func<double> func) { }
}

public class Derived : Base
{
public Derived() : base(() => Method()) <-- compiler: Cannot access non-static method 'Method' in static context
{
}

public double Method() { return 1.0; }
}

最佳答案

它实际上是在基本构造函数的参数中引用“this”,这是你不能做的。

如果您的委托(delegate)确实不需要访问 this(您的示例不需要),您可以将其设为静态。您还可以使用方法组转换来简化它:

public class Base
{
public Base(Func<double> func)
{
double result = func();
}
}

public class Derived : Base
{
public Derived() : base(Method)
{
}

public static double Method() { return 1.0; }
}

如果您确实需要使用“this”,您可以:

  • 让它成为一个虚方法而不是调用委托(delegate)
  • 让它成为一个静态方法,接受一个适当的实例,例如

    public class Base
    {
    public Base(Func<Base, double> func)
    {
    double result = func(this);
    }
    }

    public class Derived : Base
    {
    public Derived() : base(x => Method(x))
    {
    }

    private static double Method(Base b)
    {
    // The documentation would state that the method would only be called
    // from Base using "this" as the first argument
    Derived d = (Derived) b;
    }
    }

关于来自派生类的 C# 方法作为基构造函数中的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5064986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com