我可以创建一个类的静态默认实例,将该实例用作构造函数中的默认参数吗?

时间:2019-05-03 21:53:12

标签: c# class constants compile-time

我有一个使用接口作为其构造函数参数之一的类。有没有一种方法可以创建特定实现的实例,可以将其用作参数的默认值?

    interface IClassA
    {
        void AMethod();
    }

    class ClassA : IClassA
    {
        void AMethod()
    {
        // Do stuff
    }
}

class Other
{
    public Other(IClassA ia = new ClassA())
    {
    }
}

为此,我遇到了编译器错误,而我尝试过的所有其他操作都是“ ia的默认参数值必须是编译时常量”

这在c ++中很容易做到(我在c#中相对缺乏经验)

如何使类的实例成为编译时常量?

1 个答案:

答案 0 :(得分:1)

您可以将null指定为默认值,然后将其与实际值合并:

public Other(IClassA ia = null)
{
     ia = ia ?? new ClassA();
     ia.AMethod();
}

传递空new Other(null)或根本不传递任何new Other都将new ClassA()用作“默认”值。