首页 / C# / c# – 关于泛型,继承和链接的棘手问题
c# – 关于泛型,继承和链接的棘手问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 关于泛型,继承和链接的棘手问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2067字,纯文字阅读大概需要3分钟。
内容图文
![c# – 关于泛型,继承和链接的棘手问题](/upload/InfoBanner/zyjiaocheng/768/918cc75085264c8fba79896e219b56e8.jpg)
对于上下文 – read this.
问题:
class Program
{
static void Main()
{
var b = new bar();
b.buzz().fizz().buzz().fizz(); //cool
// ^FAIL!!!...<------------------------------------
Console.ReadLine();
}
}
public class foo
{
public foo fizz() { return this; }
}
public class bar : foo
{
public bar buzz()
{
return this;
}
}
解:
class Program
{
static void Main()
{
var b = new bar();
b.buzz().fizz().buzz().fizz(); //cool stuff
Console.ReadKey();
}
}
public static class fooExtensions
{
public static T fizz<T>(this T t) where T : foo
{ return t; }
}
public class foo{}
public class bar : foo
{
public bar buzz()
{
return this;
}
}
这是一种技术如何“模仿”能够返回派生类型的基类方法(否则我的b不能再次调用buzz()).
更进一步,使foo / bar通用(这仍然可以正常工作):
class Program
{
static void Main()
{
var b = new bar<buzz>();
b.buzz().fizz().buzz().fizz(); //cool
Console.ReadLine();
}
}
public static class fooExtensions
{
public static T fizz<T>(this T t) where T : foo<buzz>
{ return t; }
}
public class buzz { public string name { get; set;} }
public class foo<T> where T : buzz
{}
public class bar<T> : foo<T> where T : buzz
{
public bar<T> buzz()
{
return this;
}
}
问题是 –
如何将lambda传递给知道tbuzz及其属性的fizz方法,而不显式传递类型参数.
破碎的代码可能反映了我正在寻找的东西:
class Program
{
static void Main()
{
var b = new bar<buzz>();
b.buzz().fizz(x=>x.name).buzz().fizz(); //not cool anymore
// ^FAIL!!!<---------------------------------
Console.ReadLine();
}
}
public static class fooExtensions
{
//NO IDEAS WHAT TO WRITE BELOW!!!
public static T fizz<T, Tbuzz>(this T t,
Func<Tbuzz, object> superlambda)
where T : foo<buzz>
where Tbuzz : buzz
{
return t;
}
}
public class buzz { public string name { get; set;} }
public class foo<T> where T : buzz
{}
public class bar<T> : foo<T> where T : buzz
{
public bar<T> buzz()
{
return this;
}
}
想知道这是否可能.如果没有 – 为什么?
从理论上讲 – foo< T>知道下面有一个嗡嗡声.
有没有其他方法如何创建基本方法或模仿它支持链接这样的类?
解决方法:
我不认为你想要完成的是可能的.从理论上讲,你需要的是某种约束,如:
where TBuzz : T<inner>
意思是TBuzz需要是T的内部泛型类型.据我所知,这是不可能的.
内容总结
以上是互联网集市为您收集整理的c# – 关于泛型,继承和链接的棘手问题全部内容,希望文章能够帮你解决c# – 关于泛型,继承和链接的棘手问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。