c# 从抽象类传递继承类型调用泛型方法

问题描述 投票:0回答:1

我将更好地解释我的意思。

我认为我想要的不可能,但我会尝试。

我有一个静态类,它有这个方法:

public static class Register
{
    public static void PrintType<T>(T passedVar) where T : AbstractType
    {
         Console.WriteLine(typeof(T));
    }
}

我有调用此方法的抽象类:

public abstract class AbstractType
{
    public void UseStaticMethod() => Register.PrintType(this);
}

以及继承类:

public class InheritingType : AbstractClass { }

实际上,如果我这样做:

InheritingType myVar = new InheritingType();
myVar.UseStaticMethod();

它打印“AbstractType”。是否可以让它打印“InheritingType”?

非常感谢你

c# generics inheritance abstract-class
1个回答
0
投票

我可以看到两种可能的解决方案:要么使用参数,而不是类型

T

public static class Register
{
    public static void PrintType<T>(T passedVar) where T : AbstractType
    {
         // We use passedVar (actual value), not declared type T 
         Console.WriteLine(passedVar.GetType());
    }
}

override
UseStaticMethod()
方法:

public abstract class AbstractType
{
    public virtual void UseStaticMethod() => Register.PrintType(this);
}

public class InheritingType : AbstractType
{
    public override void UseStaticMethod() => Register.PrintType(this);
}
© www.soinside.com 2019 - 2024. All rights reserved.