这种类型的方法是否应该在C#中超载? [英] Should this type of method overload work in 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屋!