我有几个不同的类来表示消息数据(实现了 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/