如何在C#中调用参数类型的parameterfull构造函数?

如何在C#中调用参数类型的parameterfull构造函数?,c#,.net,generics,constructor,constraints,C#,.net,Generics,Constructor,Constraints,我有一个带有参数完整构造函数的抽象类: public abstract class LoggerAdapterBase<TLogger> { protected readonly TLogger _logger; public LoggerAdapterBase(TLogger logger){ this._logger = logger; } } 这不是一个理想的实现,因为在使用LoggerManager创建实例时可能会出现NullRef

我有一个带有参数完整构造函数的抽象类:

public abstract class LoggerAdapterBase<TLogger>
{
    protected readonly TLogger _logger;

    public LoggerAdapterBase(TLogger logger){
        this._logger = logger;
    }
}

这不是一个理想的实现,因为在使用LoggerManager创建实例时可能会出现NullReferenceException,以及意外地替换了prop Logger。

基本上,您不能做自己想做的事情。以下是一个原因示例:

//这是完全正确的
公共类StringLoggerAdapter:LoggerAdapterBase
{
私有StringLoggerAdapter():base(“任何内容”)
{
}
}
您希望
LoggerManager.CreateLogger
做什么?它没有可访问的构造函数可调用,并且存在的一个构造函数没有
LoggerManager
期望的参数列表

构造函数不是继承的——仅仅因为基类有一个带有特定参数列表的构造函数并不意味着派生类会继承

目前,除了需要无参数构造函数的
new()
约束之外,没有办法要求类型参数具有特定的参数列表

有人建议C#团队可能在C#的更高版本中引入这一点,但它现在不存在,我也不希望它出现在C#9中。

C#类不会从基类继承构造函数。子类可以从自己的构造函数调用父类的构造函数,但不能使用父类的构造函数创建子类的实例。
public class LoggerManager<TLogger, TLoggerAdapter>: ILoggerManager<TLogger> where TLoggerAdapter: LoggerAdapterBase<TLogger>
{
    private readonly TLogger _logger;
    public LoggerManager(TLogger logger)
    {
        this._logger = logger;
    }
    public LoggerAdapterBase<TLogger> CreateLogger(Configuration configuration)
    {
        return new TLoggerAdapter(this._logger);
        //Line above says: Cannot create an instance of the variable type 'TLoggerAdapter' because it does not have the new() constraint
    }
}
return new TLoggerAdapter() { Logger = _logger };