c# - 如何从基类引用派生类型?
问题描述
问题“?”有关键字吗?在下面标记或不使用模板达到相同效果的方法?
abstract class A
{
public abstract void Attach(? x);
}
class B : A
{
public override void Attach(B b) {}
}
class C : A
{
public override void Attach(C c) {}
}
以便:
var b1 = new B();
var b2 = new B();
var c = new C();
b1.Attach(b2);
b1.Attach(c); // should not compile
编辑:对于模板,我的意思是类型参数,例如Attach<T>(T x, T y)
// 如果我们忽略该示例采用 1 个参数
解决方案
恼人的是,没有。您可以获得的最接近的是:
abstract class A<T> where T : A<T>
{
public abstract void Attach(T x);
}
class B : A<B>
{
public override void Attach(B b) { }
}
class C : A<C>
{
public override void Attach(C c) { }
}
然而,这并不能阻止某人写作:
class D : A<B>
{
...
}
如果你想避免这种情况,你需要在's 的构造函数中进行运行时检查this.GetType() == typeof(T)
或类似的检查。A
推荐阅读
- python - 机器人回复时没有通知
- flutter - 无法读取提供者数据,尽管它位于祖先小部件中。扑
- delphi - cxGrid 立即行选择
- angular - 如何在 Rxjs iif 条件运算符中将两个可观察对象组合在一起
- javascript - 如何在 socket.io 中更新我新连接的客户端?
- c++ - 具有 k 个断开顶点的三元组的总和
- php - 如何在 Bagisto 电子商务的客户/帐户页面的“sidemenu”上添加新图标
- r - 将 geom_point 大小与 geom_tile 大小匹配
- pine-script - 在高点上方止损的策略进入。延迟进入
- php - 更新库存数量