c# – 如何确定哪个继承类正在使用抽象类的方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何确定哪个继承类正在使用抽象类的方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2296字,纯文字阅读大概需要4分钟。
内容图文
![c# – 如何确定哪个继承类正在使用抽象类的方法](/upload/InfoBanner/zyjiaocheng/807/273542f743544bf08786b7e56f1233a5.jpg)
在我的控制台应用程序中有一个抽象的Factory类“Listener”,它包含用于侦听和接受连接以及生成客户端类的代码.此类由另外两个类(WorldListener和MasterListener)继承,这些类包含更多特定于协议的覆盖和函数.
我还有一个辅助类(ConsoleWrapper),它封装和扩展System.Console,包含用于写入控制台信息的方法,用于解释WorldListener和MasterListener实例的内容.
我需要一种方法来在抽象的ListenerClass中确定哪个Inheriting类正在调用它的方法.
任何有关此问题的帮助将不胜感激!我很难过:X
我想要做的简化示例.
abstract class Listener
{
public void DoSomething()
{
if(inheriting class == WorldListener)
ConsoleWrapper.WorldWrite("Did something!");
if(inheriting class == MasterListener)
ConsoleWrapper.MasterWrite("Did something!");
}
}
public static ConsoleWrapper
{
public void WorldWrite(string input)
{
System.Console.WriteLine("[World] {0}", input);
}
}
public class WorldListener : Listener
{
public void DoSomethingSpecific()
{
ConsoleWrapper.WorldWrite("I did something specific!");
}
}
public void Main()
{
new WorldListener();
new MasterListener();
}
预期产出
[World] Did something!
[World] I did something specific!
[Master] Did something!
[World] I did something specific!
解决方法:
如果您知道要比较的每种类型,请使用is运算符:
if (this is WorldListener)
{
// ...
}
else if (this is MasterListener)
{
// ...
}
或者,如果您想要更多灵活性,可以使用GetType:
var type = GetType();
// Do some logic on the type to determine what to do next.
但是,你应该小心这种方法;它通常表明你需要明确检查类型的不良设计(正如这些lovely people坚持的那样).相反,使用多态来将所需行为委托给基类(使用基类中的虚拟或抽象方法)几乎总是更合适 – 毕竟,这就是它的设计目标!
你可以应用这样的多态:
static class Program
{
static void Main(string[] args)
{
Listener listener = new WorldListener();
listener.DoSomething();
}
}
abstract class Listener
{
public void DoSomething()
{
var output = Decorate("Did something!");
ConsoleWrapper.WriteLine(output);
}
protected abstract string Decorate(string input);
}
class WorldListener : Listener
{
protected override string Decorate(string input)
{
return string.Format("[World] {0}", input);
}
}
class MasterListener : Listener
{
protected override string Decorate(string input)
{
return string.Format("[Master] {0}", input);
}
}
这将产生输出[世界]做了什么!这种方法的优点是,如果你想要添加另一种类型的监听器,只需用适当的Decorate方法为它定义一个新类;没有必要修改Listener本身.
内容总结
以上是互联网集市为您收集整理的c# – 如何确定哪个继承类正在使用抽象类的方法全部内容,希望文章能够帮你解决c# – 如何确定哪个继承类正在使用抽象类的方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。