Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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#_.net_Generics - Fatal编程技术网

C#通用约束问题

C#通用约束问题,c#,.net,generics,C#,.net,Generics,我可以在C#中的基类中声明的派生类型上传播泛型约束吗 示例程序显示错误: 类型“T”不能用作泛型类型中的类型参数“T” 或方法“Test.Base”。没有装箱转换或类型参数 从“T”到“Test.IBase”的转换 接口IBase { } 类基址,其中T:IBase { } 派生类:基 { } 类派生:基,其中T:IBase { } 类派生:基,其中T:IBase { } 应该是: class Derived<T> : Base<T> where T : IBase {

我可以在C#中的基类中声明的派生类型上传播泛型约束吗

示例程序显示错误:

类型“T”不能用作泛型类型中的类型参数“T” 或方法“Test.Base”。没有装箱转换或类型参数 从“T”到“Test.IBase”的转换

接口IBase
{
}
类基址,其中T:IBase
{
}
派生类:基
{
}
类派生:基,其中T:IBase
{
}
类派生:基,其中T:IBase
{
}
应该是:

class Derived<T> : Base<T> where T : IBase
{

}
类派生:基,其中T:IBase
{
}
始终显式地放置约束,因为T只是一个声明,它与基类中的T不同。

应该是:

class Derived<T> : Base<T> where T : IBase
{

}
类派生:基,其中T:IBase
{
}
始终明确地设置约束,因为T只是一个声明,它与基类中的T不同。

派生的
类中,您没有指定
T
必须实现
IBase
,因为它在中用作
base
中的类型参数,所以不能说任何
T
可以使用。将其更改为:

class Derived<T> : Base<T> where T : IBase
类派生:基,其中T:IBase
派生的
类中,您没有指定
t
必须实现
IBase
,因为它在中用作
Base
中的类型参数,所以不能说任何
t
都可以使用。将其更改为:

class Derived<T> : Base<T> where T : IBase
类派生:基,其中T:IBase

我已经申请了,但是html格式有错误。所以请再检查一遍。我已经申请了,但是html格式有错误。所以请再检查一遍。这是我已经在基类上完成的重复任务。在C++中,这是可能的。C#没有提供任何技巧吗?不幸的是,在C#中,您应该始终在派生类型中定义约束。这是我已经在基类上完成的重复任务。在C++中,这是可能的。C#没有提供任何技巧吗?不幸的是,在C#中,您应该始终在派生类型中定义约束。这是我已经在基类上完成的重复任务。在C++中,这是可能的。C#没有提供任何技巧吗?这是另一个t,你仍然必须约束它;它不知道它和基类是一样的。@RajdipPatel:L-Three说的。将
T
视为方法的参数。仅仅因为方法的两个参数命名相同并不意味着它们引用相同的东西。这是我已经在基类上完成的重复任务。在C++中,这是可能的。C#没有提供任何技巧吗?这是另一个t,你仍然必须约束它;它不知道它和基类是一样的。@RajdipPatel:L-Three说的。将
T
视为方法的参数。仅仅因为方法的两个参数命名相同并不意味着它们引用相同的东西。