【发布时间】:2023-03-10 22:14:01
【问题描述】:
编辑:从另一个问题中获得建议的解决方案添加了后续问题 EDIT2:我刚刚意识到不需要我的后续问题。
是否可以让一个类型参数为 T 的抽象基类有一个构造函数,该构造函数接受 T 的参数并将其分配给 T 的属性?我想要实现的是所有派生类都有一个构造函数来做到这一点?
类似:
public abstract class NotificationBase <T>
{
public string Text { get; set; }
public T Context { get; set; }
public NotificationBase(T context, string text)
{
Context = context;
Text = text;
}
}
public class NumberNotification : NotificationBase<int>{}
public class Program
{
public void Run()
{
var thing = new NumberNotification(10, "Hello!");
}
}
编辑: 我得到了另一个问题的链接,该问题解释了如何做到这一点,这很棒。但是我对此有一些问题。我并不是说它错了,如果这是唯一的方法,那就是它。然而,对于我想要做的事情来说,这并不是理想的情况。我解释。这是解决方案:
public class Base
{
public Base(Parameter p)
{
Init(p)
}
void Init(Parameter p)
{
// common initialisation code
}
}
public class Derived : Base
{
public Derived(Parameter p) : base(p)
{
}
}
..效果很好。但是,它确实产生了两个小问题,我想看看它们是否可以解决。
- 我想要的是强制从基类派生的所有类将 T 传递给构造函数,使其强制。使用此解决方案,可以将其排除在外。
- 如果所有类都应该这样做,那么创建构造函数来传播强制参数感觉是多余的。
编辑:我刚刚意识到要求一个传播类型参数的构造函数是我正在寻找的。我确保 T 属性获得一个值,并允许在构造函数中发生其他事情。
【问题讨论】:
-
这能回答你的问题吗? Can I inherit constructors?
-
@AluanHaddad 是的!但它创造了另一种情况,所以我会更新操作。谢谢!另外:上周所有帖子都立即被否决。那是怎么回事?我看不出我的问题有那么糟糕吗?
-
什么做什么?我也没有投反对票。
-
@AluanHaddad 哦,不,我不认为你做到了。我只是感到惊讶,似乎有人只是立即对所有内容投反对票。我用我的问题更新了 OP :)
标签: c#