gpt4 book ai didi

c# - 由于泛型类型导致不必要的长类名

转载 作者:行者123 更新时间:2023-11-30 15:03:52 27 4
gpt4 key购买 nike

所以我有一个类,里面有一个包装类:

public class RandomClass<TK, TV>
{
internal class RandomClassWrapper<TK, TV> : RandomClass<TK, TV> {}
}

现在的原因是,RandomClassWrapper 正在使用 new关键字,以覆盖 RandomClass 中某些方法的行为。这是因为我只希望我的库能够访问这些函数。

还需要修改RandomClass中的一些私有(private)变量,这也是嵌套的原因。

但是,当我想初始化它时,我必须去

var rc = new RandomClass<int, int>.RandomClassWrapper<int, int>();

为什么第一个<int, int>必需的?为什么不能这样写:

var rc = new RandomClass.RandomClassWrapper<int, int>();

有什么方法可以避免输入额外的 <int, int>它可以变成这样的东西:<Dictionary<string, nameofclass>, List<thisistoolong>>

这有点夸张,但你明白我的意思。必须将这些类型放置两次是对空间的巨大浪费。

谁能提出不同的方法?

由于这有助于稍微澄清问题,因此我将注意以下两条评论:

So, is your question "why can't the compiler infer the generic arguments to RandomClassWrapper from the arguments to RandomClass? – Ed S. 3 mins ago

@EdS. That is one component of the question, yes. The other, is: Since it can't, is there an alternate approach / hack that can clean this up and avoid having to type the generic arguments twice. – caesay just now

最佳答案

第二个类嵌套在外部泛型类中,因此不需要重新指定类型。

internal class RandomClassWrapper : RandomClass<TK, TV> {}

如果编译正确,那么你只需要指定一组泛型,因为嵌套类会自动共享类型:

var rc = new RandomClass<int, int>.RandomClassWrapper();

您需要意识到的是,在幕后,编译器会为每组不同的泛型类型生成新的类定义(我认为措辞不佳)。这意味着

RandomClass<int, int>已经是与 RandomClass<string, string> 不同的定义因此它的内部嵌套类也已经包含在一个单独的通用定义中。

关于c# - 由于泛型类型导致不必要的长类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11183564/

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