Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#通用强制转换_C#_Casting - Fatal编程技术网

C#通用强制转换

C#通用强制转换,c#,casting,C#,Casting,我有一个无法解决的铸造问题: 在ClassA initialize函数中,我想将“this”作为参数传递,但是编译器不能从ClassA转换到ClassA,因为知道它们是相同的(其中T:ClassB) 公共类ClassA:MonoBehavior其中T:ClassB { 公共无效初始化() { T项=。。。 item.Initialize(this);//无法隐式地从ClassA转换为ClassA。 } } 公共B类:单一行为 { 公共虚拟无效初始化(ClassA管理器,T数据) { ... }

我有一个无法解决的铸造问题:

在ClassA initialize函数中,我想将“this”作为参数传递,但是编译器不能从
ClassA
转换到
ClassA
,因为知道它们是相同的(
其中T:ClassB

公共类ClassA:MonoBehavior其中T:ClassB
{
公共无效初始化()
{
T项=。。。
item.Initialize(this);//无法隐式地从ClassA转换为ClassA。
}
}
公共B类:单一行为
{
公共虚拟无效初始化(ClassA管理器,T数据)
{
...
}
}

谢谢。

考虑一下:
大象:动物
;这并不意味着
List:List
,您不能将
List
转换为
List
,原因有很多(包括:在转换为
List
后,您可以
将(猴子)
添加到
列表
,因为
猴子:动物
)。这在概念上是完全相同的

这对类不起作用。只有当
ClassB
是一个带有
out
类型参数的接口时,它才起作用,如下所示:

public interface IInterfaceB<out T>
{
   …
}
公共接口界面b
{
…
}

但是,out类型参数意味着您只能将类型参数
T
用于
IIinterfaceB
接口成员中的返回值,而不能用于参数。

您尝试了什么,出现了什么错误?为什么您认为可以从
ClassA
转换为
ClassA
?泛型类是不变的。例如,您不能将
列表
强制转换为
列表
。这里也发生同样的事情。A和B不一样。你可以从B到A,但不能从A到B。假设B是一个最多可以容纳50个弹珠的盒子。A是一个最多可以容纳100个弹珠的盒子。你总是可以把B放进A。但是如果你把A放进B,地板上可能会有很多大理石。可能的重复:@Grit这并不意味着“相同”;这意味着允许任何
T
,即
ClassB
,或继承自
ClassB
,我认为这应该添加到C#泛型类型的MSDN文档中
public interface IInterfaceB<out T>
{
   …
}