【问题标题】:Passing a Constructor into into base class constructor将构造函数传递给基类构造函数
【发布时间】:2015-02-27 20:01:33
【问题描述】:

我有一个基类,它需要初始化一个变量,该变量将根据调用构造函数的孩子而改变。 所以,

public class TestClass<T> {
    T variable;
    string parameter;

    public TestClass(passed_in_constructor) {
        variable = passed_in_constructor(parameter);
    }
}

我该怎么做?

编辑:让我重新表述这个问题。以下是我正在尝试做的另一种方法,我可以更好地解释错误和问题

我目前有以下课程:

public class Test<T> {
    SqlConnection conn;
    T genericGuy;

    public Test() {
        conn = ...this is initialized properly
        genericGuy = (T)Activator.CreateInstance(typeof(T), sqlConn);
    }
 }

但是,当我运行它时,我得到了一个错误。我的“T”实际上是一个接口,因此错误表明该接口中没有定义构造函数。

我希望接口下的构造函数被调用...我该怎么做?

【问题讨论】:

  • 让孩子实例化它。为什么要尝试在基类中做呢?
  • 不清楚你的意思。也许public abstract class TestClass&lt;T&gt; { readonly T field; protected TestClass(T passed_in_constructor) { field = passed_in_constructor; } }你能举个例子来说明应该如何使用它吗?
  • 基本上“变量”将是不同类型的控制器。我需要能够实例化传入的任何一个
  • 这听起来确实像是一个 XY 问题。
  • 为什么你不能以T 的身份通过课程?为什么是界面?

标签: c# constructor function-pointers


【解决方案1】:

传递Func。让孩子决定如何处理该变量:

class Foo<T>
{
    T variable;
    string parameter;

    public Foo(Func<string, T> action)
    {
        variable = action(parameter);
    }
}

【讨论】:

  • 但是那个字符串是null?
  • 假装字符串不为空哈哈!如果它是构造函数,我该如何传递?调用类是什么样的?抱歉,对这个很陌生
  • @LaurAchnid public Bar() : base(str =&gt; ConvertStrTo&lt;T&gt;(str)) 类似的东西。您最好从文章和书籍中学习,而不是从 QA 网站中学习。
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
相关资源
最近更新 更多