这种类型的方法是否应该在C#中超载? [英] Should this type of method overload work in C#?

查看:58
本文介绍了这种类型的方法是否应该在C#中超载?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

公共类基地

{

}


公共类派生:基地

{

}


公共类服务

{

public void Send(Base baseObject)

{

//发送baseObject

Console.Out.WriteLine(" Called public void Send(Base baseObject)

签名);

}


public void发送(Subclass derivedObject)

{

// send derivedObject

Console.Out.WriteLine(" Called public void Send(Subclass derivedObject)

signature");

} < br $>
}


公共类MainClass

{

public static void Main(string [] args)

{

Base baseObject = new Base();

派生的derivedObject = new Derived();


服务服务=新服务();


//这会调用public void Send(Base baseObject)按预期

service.Send(baseObject) ;


//这个调用public void Send(Base baseObject),

//但它应该调用public void Send(Subclass derivedObject),

//不应该吗???

service.Send(derivedObject);

}

}


我希望这可以工作,但我在运行时测试了它,验证

实例是Derived类,它仍然用
基类。


谢谢,


Dave Raskin

public class Base
{
}

public class Derived : Base
{
}

public class Service
{
public void Send(Base baseObject)
{
// send baseObject
Console.Out.WriteLine("Called public void Send(Base baseObject)
signature");
}

public void Send(Subclass derivedObject)
{
// send derivedObject
Console.Out.WriteLine("Called public void Send(Subclass derivedObject)
signature");
}
}

public class MainClass
{
public static void Main(string[] args)
{
Base baseObject = new Base();
Derived derivedObject = new Derived();

Service service = new Service();

// this calls public void Send(Base baseObject) as expected
service.Send(baseObject);

// this calls public void Send(Base baseObject),
// but it should call public void Send(Subclass derivedObject),
// shouldn''t it???
service.Send(derivedObject);
}
}

I expect this to work, but I tested it at runtime, verifying that the
instance is of the Derived class and it still calls the signature with the
base class.

thanks,

Dave Raskin

推荐答案

你好。我相信我能让它正常工作(如你所料)。

这里是我使用的代码(稍加修改以使其编译)。最后输出



// --------------------------- -----------------------------------开始代码

使用System;


公共类基地

{

}


公共类派生:Base

{

}


公共类服务

{

public void发送(Base baseObject)

{

//发送baseObject

Console.WriteLine(" Called public void Send(Base baseObject)signature" );

}


public void发送(派生的衍生对象)

{

//发送derivedObject

Console.WriteLine(" Called public void Send(Subclass derivedObject)

signature");

}

}


公共类MainClass

{

public static void Main(string [] args)

{

Base baseObject = new Base();

派生的derivedObject = new派生();


服务se rvice = new Service();


//这会调用public void Send(Base baseObject)按预期

service.Send(baseObject);


//这个调用public void Send(Base baseObject),

//但它应该调用public void Send(Subclass derivedObject),

//不应该吗???

service.Send(derivedObject);

}

}

// ---------------------------------------------- ----------------结束代码

这是我看到的输出。


C: \ temp> basetesting

调用public void Send(Base baseObject)签名

调用public void Send(Subclass derivedObject)签名


C:\ temp>
Howdy. I believe I got it to work properly (as you expected) for me.
Here''s the code I used (slightly modified to get it to compile). Output at
the end.
//--------------------------------------------------------------start code
using System;

public class Base
{
}

public class Derived : Base
{
}

public class Service
{
public void Send(Base baseObject)
{
// send baseObject
Console.WriteLine("Called public void Send(Base baseObject) signature");
}

public void Send(Derived derivedObject)
{
// send derivedObject
Console.WriteLine("Called public void Send(Subclass derivedObject)
signature");
}
}

public class MainClass
{
public static void Main(string[] args)
{
Base baseObject = new Base();
Derived derivedObject = new Derived();

Service service = new Service();

// this calls public void Send(Base baseObject) as expected
service.Send(baseObject);

// this calls public void Send(Base baseObject),
// but it should call public void Send(Subclass derivedObject),
// shouldn''t it???
service.Send(derivedObject);
}
}
//--------------------------------------------------------------end code
And here''s the output I see.

C:\temp>basetesting
Called public void Send(Base baseObject) signature
Called public void Send(Subclass derivedObject) signature

C:\temp>


你好。我相信我能让它正常工作(如你所料)。

这里是我使用的代码(稍加修改以使其编译)。最后输出



// --------------------------- -----------------------------------开始代码

使用System;


公共类基地

{

}


公共类派生:Base

{

}


公共类服务

{

public void发送(Base baseObject)

{

//发送baseObject

Console.WriteLine(" Called public void Send(Base baseObject)signature" );

}


public void发送(派生的衍生对象)

{

//发送derivedObject

Console.WriteLine(" Called public void Send(Subclass derivedObject)

signature");

}

}


公共类MainClass

{

public static void Main(string [] args)

{

Base baseObject = new Base();

派生的derivedObject = new派生();


服务se rvice = new Service();


//这会调用public void Send(Base baseObject)按预期

service.Send(baseObject);


//这个调用public void Send(Base baseObject),

//但它应该调用public void Send(Subclass derivedObject),

//不应该吗???

service.Send(derivedObject);

}

}

// ---------------------------------------------- ----------------结束代码

这是我看到的输出。


C: \ temp> basetesting

调用public void Send(Base baseObject)签名

调用public void Send(Subclass derivedObject)签名


C:\ temp>
Howdy. I believe I got it to work properly (as you expected) for me.
Here''s the code I used (slightly modified to get it to compile). Output at
the end.
//--------------------------------------------------------------start code
using System;

public class Base
{
}

public class Derived : Base
{
}

public class Service
{
public void Send(Base baseObject)
{
// send baseObject
Console.WriteLine("Called public void Send(Base baseObject) signature");
}

public void Send(Derived derivedObject)
{
// send derivedObject
Console.WriteLine("Called public void Send(Subclass derivedObject)
signature");
}
}

public class MainClass
{
public static void Main(string[] args)
{
Base baseObject = new Base();
Derived derivedObject = new Derived();

Service service = new Service();

// this calls public void Send(Base baseObject) as expected
service.Send(baseObject);

// this calls public void Send(Base baseObject),
// but it should call public void Send(Subclass derivedObject),
// shouldn''t it???
service.Send(derivedObject);
}
}
//--------------------------------------------------------------end code
And here''s the output I see.

C:\temp>basetesting
Called public void Send(Base baseObject) signature
Called public void Send(Subclass derivedObject) signature

C:\temp>


嗨Dave,


服务没有带Derived参数的重载,所以编译器

使用了与Base参数重载的最佳匹配。从你给出的

信息来看,我不知道SubClass是什么。但是,如果你将
的定义更改为Send(SubClass derivedObject),你可以得到

你所期望的:


public void Send(Derived derivedObject)

{

// send derivedObject

Console.Out.WriteLine(" Called public void Send(派生的衍生对象)

签名");

}


Joe

-
http://www.csharp-station.com


" Dave Raskin" < Dave Ra****@discussions.microsoft.com >在消息中写道

新闻:0A ********************************** @ microsof t.com ...
Hi Dave,

Service doesn''t have an overload with a Derived parameter, so the compiler
used a best match that took the overload with the Base parameter. From the
information you''ve given, I can''t tell what SubClass is. However, if you
change the definition of Send(SubClass derivedObject) to this, you could get
what you expect:

public void Send(Derived derivedObject)
{
// send derivedObject
Console.Out.WriteLine("Called public void Send(Derived derivedObject)
signature");
}

Joe
--
http://www.csharp-station.com

"Dave Raskin" <Dave Ra****@discussions.microsoft.com> wrote in message
news:0A**********************************@microsof t.com...
公共类基地
{
}

公共类派生:基地
{
}

公共类服务
{public void发送(Base baseObject)
//
//发送baseObject
Console.Out.WriteLine( 调用public void Send(Base baseObject)
签名);
}
公共无效发送(Subclass derivedObject)
//
derivedObject
Console.Out.WriteLine(" Called public void Send(Subclass derivedObject)
signature");
}

公共类MainClass
{public static void Main(string [] args)
{base baseObject = new Base();
Derived derivedObject = new Derived();

服务服务=新服务();
//这会调用public void Send(Base baseObject)按预期
service.Send(baseObject);

//这叫publi c void Send(Base baseObject),
//但它应该调用public void Send(Subclass derivedObject),
//不应该???
service.Send(derivedObject) ;
}

我希望这可以工作,但我在运行时测试了它,验证
实例是Derived类,它仍然调用
基类签名。

谢谢,

Dave Raskin
public class Base
{
}

public class Derived : Base
{
}

public class Service
{
public void Send(Base baseObject)
{
// send baseObject
Console.Out.WriteLine("Called public void Send(Base baseObject)
signature");
}

public void Send(Subclass derivedObject)
{
// send derivedObject
Console.Out.WriteLine("Called public void Send(Subclass derivedObject)
signature");
}
}

public class MainClass
{
public static void Main(string[] args)
{
Base baseObject = new Base();
Derived derivedObject = new Derived();

Service service = new Service();

// this calls public void Send(Base baseObject) as expected
service.Send(baseObject);

// this calls public void Send(Base baseObject),
// but it should call public void Send(Subclass derivedObject),
// shouldn''t it???
service.Send(derivedObject);
}
}

I expect this to work, but I tested it at runtime, verifying that the
instance is of the Derived class and it still calls the signature with the
base class.

thanks,

Dave Raskin



这篇关于这种类型的方法是否应该在C#中超载?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆