首页 / C# / c#-将简单对象转换为简单通用接口
c#-将简单对象转换为简单通用接口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-将简单对象转换为简单通用接口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1441字,纯文字阅读大概需要3分钟。
内容图文
![c#-将简单对象转换为简单通用接口](/upload/InfoBanner/zyjiaocheng/669/e6e05117403b48f4847be564a5e47894.jpg)
我正在寻找一种将对象转换为简单接口以及从简单接口派生的通用接口的方法.
这是我的示例:
interface INonGeneric
{
}
interface IGeneric<T> : INonGeneric where T : ITypeParameter
{
T Build();
}
interface ITypeParameter
{
}
class TypeClass : ITypeParameter
{
}
这就是我尝试使用的设计.如果我对泛型的理解存在缺陷(我认为是有缺陷的),那么错误对于您将是显而易见的.
然后创建我要使用的类:
class MyClass : MyClassBase<TypeClass>
{
public override TypeClass Build()
{
return new TypeClass();
}
}
abstract class MyClassBase<T> : IGeneric<T> where T : ITypeParameter
{
public abstract T Build();
}
然后,我尝试像这样投射它们:
void Main()
{
var myClass = new MyClass();
var cast1 = myClass as INonGeneric;
if(cast1 != null) Console.WriteLine("cast 1 works!"); //THIS WORKS
var cast2 = TestCast<ITypeParameter>(myClass);
if(cast2 != null) Console.WriteLine("cast 2 works!"); //THIS DOES NOT WORK
}
任何帮助将不胜感激.
编辑:对不起,我忘了输入TestCast方法.这里是:
IGeneric<T> TestCast<T>(INonGeneric obj) where T : ITypeParameter
{
return obj as IGeneric<T>;
}
解决方法:
由于协方差的考虑,这不起作用.
考虑此示例代码.
var liInt = new List<int>() { 1,2,3};
var liObj = List<object>(liInt);
在那之后,您可以将一些非整数值严重添加到liObj中,显然,这不行.
bool b = false;
liObj.Add(b);
为了避免这种情况,您应该隐式告诉您,仅在返回位置而不是输入中使用泛型类型.例如:
interface IGeneric<out T> : INonGeneric where T : ITypeParameter
有关更多信息,请参见下面的链接:
http://tomasp.net/blog/variance-explained.aspx/
内容总结
以上是互联网集市为您收集整理的c#-将简单对象转换为简单通用接口全部内容,希望文章能够帮你解决c#-将简单对象转换为简单通用接口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。