c# - 有没有办法实现特定类型转换的方法?

标签 c# oop casting

我有几个不同的类来表示消息数据(实现了 ToString() 方法)

  • 数据库消息
  • Method1Message
  • Method2Message
  • 等...

然后我有一个 Message 类,它有一个表示发件人的字符串和一个表示关于消息数据类之一的字符串(来自 ToString() 消息).我创建了这个类来通过我的通信管道发送消息。

在另一端,我从字符串创建一个 Message 类并将它发送到一个特定的方法,该方法确切地知道它是哪种消息数据类型。然后我想将整个消息对象转换为能够访问特定消息数据的对象(例如 DatabaseMessage 类)。

class DatabaseMessage
{
    public string ToString()
    {
        // ...
    }
}

class Message
{
    public string sender;
    public string data;

    public static Message FromString(string message)
    {
        // ...
    }
}

//...

public void Send()
{
    DatabaseMessage db_mess = new DatabaseMessage();

    Message m = new Message();
    m.sender = "me";
    m.data = db_mess.ToString();
}

public void Recieve(string message)
{
    Message m = Message.FromString(message);

    DatabaseMethod(m);
}

public void DatabaseMethod(Message m)
{
    // I want to be able to do this:
    DatabaseMessage db_mess = (DatabaseMessage)m;

    //...
}

如何实现这一点?

希望这是有道理的。

最佳答案

据我了解,您需要的是接口(interface)或扩展特定类。

如果您将 Message 创建为一个接口(interface),您可以定义任何实现它的东西都必须有特定的方法。

然后为了得到你想要的类型,你可以使用这样的东西:

if (myMessage.GetType() == typeof(DatabaseMessage))
{
DatabaseMessage myDatabaseMessage = (DatabaseMessage)myMessage;

//etc...

}

但是如果您使用了一个接口(interface),您甚至不需要关心类型,因为只要它们使用相同的接口(interface),无论对象类型如何,这些方法都可以工作。

关于c# - 有没有办法实现特定类型转换的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14101698/

相关文章:

c# - 如何使用 AngularJS、asp.net web API 上传文件并将文件上传保存到 SQL

c# - 如何在没有 C# 类的情况下查找子列表的索引

c++ - 为什么使用 static_cast 运算符的不安全转换不会崩溃?

c++ - 错误 C4146 : unary minus operator applied to unsigned type, 结果仍未签名

c# - html 标签的 EnableViewState

c# - Parallel.ForEach 使用 NpgsqlConnection

java - 如何解决优先队列池?这是最好的选择吗?

c# - 初始化类型的类型化参数方法...为什么无效?

java - 修复 Java OOP 中的方法

c# - 将 char 隐式转换为整数有什么好处?