我有一种感觉,这个问题是一堆蠕虫,但无论如何我都会问......:)
我有一个方法:
private MembershipUser GetUserFromReader(SqlDataReader reader)
我希望使用不同的返回类型重载此方法:
private User GetUserFromReader(SqlDataReader reader)
但编译器抱怨这两种方法具有相同的签名。
那么,最好的方法是什么?我宁愿不添加不必要的 参数只是为了改变方法签名。
我玩过这样的想法:
private User GetUserFromReader(T reader)
但还没有完全探索过这个。好像我需要做一个 一堆变化与我如何使用我的读者对象。
有什么想法吗?当你有两个超载时,最佳做法是什么 相同签名的方法?
感谢您帮忙...
答案 0 :(得分:6)
为什么要超载?为什么不让方法说出它的作用,如下:
private MembershipUser GetMembershipUserFromReader(SqlDataReader reader)
private User GetUserFromReader(SqlDataReader reader)
答案 1 :(得分:5)
如果您真的想要区分返回类型,但使用相同的方法签名,则可以使用泛型:
private T GetUserFromReader<T>(SqlDataReader reader)
但是重命名这些方法要简单得多,就像Luhmann的回答一样。
答案 2 :(得分:2)
您唯一真正的选择是:
我讨厌陈腐,但并不是一种解决方法,只能通过返回类型区分方法。
如果在父类中声明了其中一个重载,那么您可以使用new
关键字来“隐藏”来自调用者的更高方法,但通常会考虑new
(在成员声明上)恶
答案 3 :(得分:1)
您无法在重载时更改返回类型。如何编译器告诉您要使用哪一个?
你应该做的是返回你想要返回的所有东西的共同超类,然后只返回适用的东西。
要么是这样,要么以不同的方式命名方法,因为它们显然做了不同的事情。
答案 4 :(得分:1)
简单的答案是,就C#而言,你不能。允许通过返回类型重载(我认为),而不是C#。
唯一真正的选择(即,不包括添加“虚拟”参数),是调用一个方法GetMembershipUserFromReader和另一个GetUserFromReader