首页 / C# / c# – 使用具有流畅接口的类型推断
c# – 使用具有流畅接口的类型推断
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 使用具有流畅接口的类型推断,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2697字,纯文字阅读大概需要4分钟。
内容图文
![c# – 使用具有流畅接口的类型推断](/upload/InfoBanner/zyjiaocheng/769/d1160274cfcb443e83c9b63fec1fdcbd.jpg)
我有一个类/接口层次结构.在接口方面我有
IQuery
ISelect (inherits IQuery)
IUpdate (inherits IQuery)
etc
在课堂上我有
QueryBase (implements IQuery)
SelectQuery (implements ISelect)
UpdateQuery (implements IUpdate)
etc
显然,例如,Update类和Select类共享一个WHERE子句,但只有一个Select具有GROUP BY功能,所以理想情况下,如果正在创建更新查询,则流畅的接口将不会提供对GROUP BY功能的访问,但是如果SelectQuery是被创造.
例如,用流利的界面术语
var/Dim select = New SelectQuery() <- returns ISelect explicit
.AddColumn(....) <- returns ISelect explicit
.AddWhere(....) <- returns ISelect inferred
.AddGroupBy(....) <- returns ISelect explicit
var/Dim update = New UpdateQuery() <- returns IUpdate explicit
.AddSet(....) <- returns IUpdate explicit
.AddWhere(....) <- returns IUpdate inferred
我不确定如何实现AddWhere功能.
以前我已经在IQuery接口中声明了AddWhere函数
Function AddWhere(ByVal condition As ICriterion) As IQuery
IQuery AddWhere(ICriterion condition)
但是因为它返回了一个IQuery,我正在失去类型推断的好处,所以一旦流畅的接口转换为IQuery,如果它是一个Select查询被创建,我将不再有权访问,例如, AddGroupBy方法.
所以我试图将它作为带有泛型的扩展方法来实现
<Extension>
Public Function AddWhere(Of T As IQuery)(Byval this as T, Byval condition as Condition) as T
this.SetWhere(condition)
Return Me
End Function
public T AddWhere<T>(T @this, Condition condition) where T : IQuery
{
@this.SetWhere(condition);
return this;
}
在QueryBase上使用Friend(内部)方法SetWhere允许我更新WHERE子句.但是因为泛型受限于IQuery,所以它不会找到SetWhere.但是,如果我约束为QueryBase,那么显然,编译器会抛出wobblies,说ISelect无法找到AddWhere方法.
我认为我还没有完全正确的继承链或接口实现,我想要实现的目标.
(我希望很清楚!!)
如果有人可以建议我在扩展方法实现方面出错,或者我应该如何更好地构建我的类/接口层次结构,我将不胜感激.
解决方法:
Public Interface IQuery
Function AddWhere() As IQuery
End Interface
Public Interface IUpdate : Inherits IQuery
Overloads Function AddWhere() As IUpdate
End Interface
Public Interface ISelect : Inherits IQuery
Overloads Function AddWhere() As ISelect
Function AddGroupBy() As ISelect
End Interface
Public Class QueryBase : Implements IQuery
Public Function AddWhere() As IQuery Implements IQuery.AddWhere
''...
Return Me
End Function
End Class
Public Class UpdateQuery : Inherits QueryBase : Implements IUpdate
Public Shadows Function AddWhere() As IUpdate Implements IUpdate.AddWhere
MyBase.AddWhere()
Return Me
End Function
End Class
Public Class SelectQuery : Inherits QueryBase : Implements ISelect
Public Shadows Function AddWhere() As ISelect Implements ISelect.AddWhere
MyBase.AddWhere()
Return Me
End Function
Public Function AddGroupBy() As ISelect Implements ISelect.AddGroupBy
''...
Return Me
End Function
End Class
内容总结
以上是互联网集市为您收集整理的c# – 使用具有流畅接口的类型推断全部内容,希望文章能够帮你解决c# – 使用具有流畅接口的类型推断所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。