让我说我有这个:
public abstract class myClass<T> : Ob<T> where T : Ob<T>, new()
现在在abstract myClass中定义的方法中,我创建了一个类myType的对象,并且在myType中定义的方法上,我传递了调用它的抽象类myClass。
所以在我的myType类中,我有:
public void myMethod(object caller)
我的问题是,如何将对象调用者强制转换为调用它的抽象类的类型?
我试过
(myClass<T>)
和
(myClass)
但都失败了。
仿制药让我头疼。
答案 0 :(得分:3)
您可以使用 as 执行此操作,如下所示:
public void MyMethod(object caller)
{
myClass<T> test = caller as myClass<T>;
if (test != null)
{
// Use test here
}
}
话虽如此,如果你总是传递一个已知的myClass<T>
,那么它可能更干净:
public void MyMethod(myClass<T> caller)
{
// Use caller directly...
}
编辑:为了演示,这是一个小样本:
using System;
public class myClass<T> where T : new()
{
public T Value;
public void CopyFromSecond(object caller)
{
myClass<T> test = caller as myClass<T>;
this.Value = test.Value;
}
}
class Program
{
static void Main(string[] args)
{
myClass<int> test = new myClass<int> { Value = 3 };
myClass<int> test2 = new myClass<int> { Value = 5 };
Console.WriteLine(test.Value);
test.CopyFromSecond(test2);
Console.WriteLine(test.Value);
Console.ReadKey();
}
}
按照预期打印3然后打印5个。
编辑2:
如果您尝试从另一个myClass<T>
中找到T的类型,则需要使用反射。您需要的方法是Type.GetGenericTypeDefinition。
答案 1 :(得分:0)
为什么你首先需要演员?也许你想要:
public void myMethod<T>(myClass<T> caller)
否则,您的问题的答案是 - 您不能,因为您不知道myClass
的哪个特定专业称呼您。