C#转换为接口泛型中的对象

疤痕

我有一个我不了解使用泛型接口进行转换的问题(可能是因为目前我对协方差和反方差还不太清楚)。

我有一个接口,在其中定义了一个getter和setter,该getter和setter应该以一种类型化的方式接受任何东西(没有对象作为类型),例如:

public interface IDummy <T>
{
     int SomeCommonMethod() ;
     T   Anything { get; set; }
}

现在,我定义了之前定义的接口的一些具体实现。

public class MyStrObj : IDummy <string>
{
     private string _stirngVal = string.Empty ;

     public int SomeCommonMethod() 
     {
         return 0 ;
     }

     public string Anything 
     { 
         get { return _stirngVal  ; } 
         set { _stirngVal = value ; }
     }
}

public class MyFileObj : IDummy <File>
{
     private File _file = null ;

     public int SomeCommonMethod() 
     {
         return 0 ;
     }

     public File Anything 
     { 
         get { return  _file ; } 
         set { _file = value ; }
     }
}

当时所有功能都按预期工作,但是现在当尝试使用这两个对象时,它们的行为对我而言变得混乱。

我尝试定义一个对象,该对象应该能够使用之前的两个类(无论它们的泛型是什么类型,它们都是IDummy都是重要的)。

public class Consumer
{
     public static void Consume ( IDummy<object> obj )
     {
          //SOME CODE HERE.
     }
}

现在,如果我尝试此代码:

MyStrObj obj = new MyStrObj () ;
Consumer.Consume ( obj ) ;

然后编译器通知我,在Consume方法调用上有一些无效的参数(肯定是obj),但是这里没有隐式转换吗?

如果我改为尝试这种方式:

MyStrObj obj = new MyStrObj () ;
Consumer.Consume ( (IDummy<object>)obj ) ;

编译器似乎按我的预期工作(当时我还没有测试两个调用是否等效)。

预先感谢任何可以帮助我理解这种行为的人,并为我的英语(不是我的语言)感到抱歉。

爱丁

IDummy<T>不是协变的。这就是为什么这样的隐式转换不起作用的原因。如果是协变的,则可以从更具体的泛型转换为更通用的泛型。但是,在您的示例中,您无法使接口协变IDummy<out T>,因为它具有带有通用参数的属性设置器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#转换为接口泛型中的对象

来自分类Dev

在C#中强制转换为任何类型的泛型

来自分类Dev

将引用转换为C#中的泛型类

来自分类Dev

需要帮助将具有泛型的接口从C#转换为F#

来自分类Dev

如何使用C#泛型将类的对象转换为T类型的对象?

来自分类Dev

如何使用C#泛型将类的对象转换为T类型的对象?

来自分类Dev

将泛型转换为接口delphi

来自分类Dev

C#中的泛型类型转换

来自分类Dev

如何在C#中将对象转换为可为空的泛型?

来自分类Dev

可以转换为接口,但不能转换为泛型

来自分类Dev

C#:从泛型转换为值类型

来自分类Dev

在C#中将委托转换为泛型委托

来自分类Dev

将泛型类转换为父 C#

来自分类Dev

C#中的泛型继承:无法将类型“ MyWidget”隐式转换为“ IWidget”

来自分类Dev

当基类在C#中是泛型时,如何将子类转换为基类

来自分类Dev

C#将抽象类<T>中的泛型T转换为动态

来自分类Dev

泛型类型接口强制转换为特定接口

来自分类Dev

具有内部泛型的C#转换对象

来自分类Dev

将对象转换为泛型

来自分类Dev

如何在C#中将具有泛型类型的类转换为具有作为泛型类型的对象的类

来自分类Dev

C#-将泛型接口转换为传递在运行时确定的类型<T>的泛型类

来自分类Dev

C#泛型,接口和继承

来自分类Dev

C#泛型性能与接口

来自分类Dev

C#泛型性能与接口

来自分类Dev

需要将泛型转换为其接口

来自分类Dev

无法将类转换为具有泛型的接口

来自分类Dev

使用C#中的泛型进行转换

来自分类Dev

在 C# 中安全地转换泛型类型

来自分类Dev

如何在C#中从泛型创建对象

Related 相关文章

热门标签

归档