将基类型转换为派生泛型类
本文关键字:派生 泛型类 类型转换 | 更新日期: 2023-09-27 17:53:55
我需要一点帮助。
public class DerivedMessage<T> : Message where T: MyClassBase
{
public TestMethod();
public T Item { get; set; }
}
public class MyClassBase
{
}
public class DerivedClass: MyClassBase
{
}
public class DerivedClass2: MyClassBase
{
}
假设我有:
Message msg = new DerivedMessage<DerivedClass>();
是否有可能在不知道其模板参数的情况下将其转换回DerivedMessage<T>
?
例如,用MyClassBase
作为模板参数创建模板:
DerivedMessage<MyClassBase> m = msg as DerivedMessage<MyClassBase>;
我的目标是获得对DerivedMessage
(例如TestMethod()
)公共方法的访问,这些方法不依赖于指定的DerivedClass
。
编辑! !
我认为你的继承树是错误的。在上面的示例中,MyClassBase
不是DerivedMessage
的基础,因此MyClassBase msg = new DerivedMessage...
行甚至不应该编译。
我认为你应该把你以后需要的所有方法放在一个由DerivedMessage
实现的接口中。以下作品:
private interface IMessage { void Test(); }
private class Message { }
private class DerivedMessage<T> : Message, IMessage where T : BaseClass { public void Test() { Console.WriteLine("Test"); } };
private class BaseClass { }
private class DerivedClass : BaseClass{};
static void Main(string[] args)
{
Message msg = new DerivedMessage<DerivedClass>();
IMessage mess = msg as IMessage;
mess.Test();
}
真正的问题是:是什么让你不去尝试? 既然你说没有依赖于某个DerivedClass
,我会稍微改变你的设计,并将方法封装在一个接口
public interface IMessage
{
void TestMethod();
}
并在DerivedClass
中实现:
public class DerivedClass<T> : IMessage, Message
where T : MyClassBase
{
// ...
}
然后使用接口与你的方法通信:
var message = (IMessage)msg;
message.TestMethod();
干杯!