gpt4 book ai didi

c# - 将 "this"传递给基础构造函数

转载 作者:行者123 更新时间:2023-11-30 14:06:43 24 4
gpt4 key购买 nike

有什么方法可以将“this”传递给基础构造函数吗?

abstract class Base<TSelf>
{
public ICollection<TSelf> List;

public Base(ICollection<TSelf> list, TSelf self)
{
List = list;
List.Add(self);
}
}

class Implementation : Base<Implementation>
{
public Implementation() : base(new List<Implementation>(), this)
{
}
}

很明显,Implementation 的构造函数中存在编译错误,其中 this 被传递给 base

我也没有看到任何在 Base 级别实例化 list 的方法。

最佳答案

不,你不能使用 this在构造函数初始值设定项中。您必须添加调用 Add(this)之后 - 但你可以在 Base<TSelf> 中做到这一点构造函数,只要你转换为 TSelf .你需要投 thisobject首先在转换到TSelf之前不幸的是,由于类型参数允许的转换的相当复杂的原因。

您可以创建一个 List<TSelf>Base构造函数虽然,没有问题。下面是显示这两者的示例代码:

abstract class Base<TSelf>
{
// Let's make it a property rather than a public field...
public ICollection<TSelf> List { get; }

public Base()
{
List = new List<TSelf>();
// This will obviously fail if you try to create a `Base<Foo>`
// from a class that isn't a Foo
TSelf selfThis = (TSelf) (object) this;
List.Add(selfThis);
}
}

class Implementation : Base<Implementation>
{
}

您可以将约束添加到 TSelf使类型转换失败不太可能是意外但并非不可能:

abstract class Base<TSelf> where TSelf : Base<TSelf>

这并不能阻止你写作

class Implementation : Base<Implementation> {}
class Evil : Base<Implementation> {}

然后当你构造一个 Evil 的实例时,您正在尝试添加 Evil引用 List<Implementation>这是行不通的…… Actor 也无法阻止你走那么远。

关于c# - 将 "this"传递给基础构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45902933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com