如果我有一个SubOfParent类,它是Parent的子类,还有两个方法:
public static void doStuff(Parent in) {}
public static void doStuff(SubOfPArent in) {}
Run Code Online (Sandbox Code Playgroud)
为什么在传递SubOfParent类型对象时会调用第一个 doStuff?
感谢您对此有任何见解!
它是否与重载相同,如果没有,你可以在C#中提供每个例子吗?
我已经阅读了对SO中提出的类似问题的回复......我不理解发布给它的回复.
类似的问题在这里问
编辑:使用C#4.0中新的"动态"关键字...这会使语言"多调度"启用吗?
假设我有以下类结构:

的Page,StaticPage并且DynamicPage接口是由客户来实现.它们根据页面类型(静态或动态)提供各种数据,用于通过页面呈现页面Renderer.这些接口可能有很多实现.
该Renderer的render页面.此外,此接口可能有多个实现(针对不同的呈现技术).
这只是一个简单的外观,它应该根据给定的页面类型在提供的渲染器上调用相应的渲染方法.这就是谎言
如何Renderer根据提供的页面类型确定在对象上调用哪个方法?
目前我正在使用条件派遣:
void render(Page page, Renderer renderer) {
if (page is StaticPage) {
renderer.renderStaticPage(page);
} else if (page is DynamicPage) {
renderer.renderDynamicPage(page);
} else {
throw new Exception("page type not supported");
}
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案的问题是每当我想添加另一个页面类型(即扩展Page界面)时,我也需要调整这个方法.实际上,这是应该使用面向对象语言中的多态(虚拟)方法,但在这种情况下,这不起作用(见下面的原因).
抽象类而不是接口.这将在实现者的类型层次结构上放置一个不必要的约束:它们将不再能够扩展他们想要的任何类,而是强制扩展抽象StaticPage或DynamicPage类,这很糟糕.
dispatch(Renderer render)向接口添加方法并强制实现者根据页面类型调用渲染器对象上的相应方法.这显然很糟糕,因为实现者不应该关心渲染:他们只需要提供要渲染的数据.
那么,也许有一些模式或一些替代设计可能有助于这种情况?欢迎任何想法.:)
我有以下C#代码.它工作正常; 但是通过使用is运算符,该GetDestination()方法被多个if条件混乱.
在.Net 4.0(或更高版本)中,避免这些"if"条件的最佳方法是什么?
编辑:角色是业务模型的一部分,目标纯粹是使用该业务模型的一个特定应用程序的工件.
码
public class Role { }
public class Manager : Role { }
public class Accountant : Role { }
public class Attender : Role { }
public class Cleaner : Role { }
public class Security : Role { }
class Program
{
static string GetDestination(Role x)
{
string destination = @"\Home";
if (x is Manager)
{
destination = @"\ManagerHomeA";
}
if (x is Accountant)
{
destination = …Run Code Online (Sandbox Code Playgroud) 我在C#中有以下代码:
static void Main(string[] args)
{
Object rect = new Rectangle();
Object circle = new Circle();
Console.WriteLine(count(rect, circle));
}
public static int count(Object obj1, Object obj2)
{
return 4;
}
public static int count(Rectangle rect, Circle circ)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序输出4,但是,我希望它选择更具体的方法,这将是第二种方法.我不能简单地将变量rect和circle定义为它们的特定类型,因为在我的代码的上下文中,我不知道它们的类型是什么.
我试图实现这个的方式是否存在完全错误,或者是否有一种相当简单的方法可以自动选择正确的方法?