c#中的内部类(即非静态嵌套类)

时间:2014-05-02 16:16:12

标签: c# delegates inner-classes

假设我已经定义了一个具有多个属性的接口,例如:

interface IFailable<T>
{
    T Value { get; }
    bool Success { get; }
}

我希望类Foo公开多个readonly实例,其中IFailable属性是根据Foo的私有非静态数据计算的,我将如何在c#中执行此操作?

在Java中它非常直观。

这是我在c#中提出的最好的,基于https://stackoverflow.com/a/4770231/146567

首先创建一个包装器:

public class FailableDelegator<T> : IFailable<T>
{
    public delegate T valueDelegate();
    public delegate bool successDelegate();

    private readonly valueDelegate valueHandler;
    private readonly successDelegate successHandler;

    public T Value { get { return valueHandler(); } }
    public bool Success { get { return successHandler(); } }

    public FailableDelegator(valueDelegate v, successDelegate s)
    {
        valueHandler = v;
        successHandler = s;
    }
}

然后用它来定义Foo构造函数中的属性:

public class Foo
{
    private double x = 3;
    private double y = -9;
    public readonly FailableDelegator<double> xPlusY;
    public readonly FailableDelegator<double> sqrtY;

    public Foo()
    {
        xPlusY = new FailableDelegator<double>(() => x + y, () => true);
        sqrtY = new FailableDelegator<double>(() => Math.Sqrt(y), () => y>=0);
    }
}

我必须将定义放在Foo的构造函数中,因为如果我直接在字段上尝试它,我会收到错误“无法访问静态上下文中的非静态字段”。

我并不热衷于此,因为对于不太重要的例子,你最终会在Foo的构造函数中使用大量代码。

0 个答案:

没有答案