提问人:a11ex 提问时间:9/22/2023 更新时间:9/22/2023 访问量:48
是否可以在 C# 中使用 getType 函数运行静态方法?[复制]
Is it possible to run a static method using getType function in C#? [duplicate]
问:
我有一个基类和一些具有一些静态方法的派生类。如果我只知道基类的对象,是否可以运行静态方法。
我尝试了 typeof 和 getType 方法来做到这一点,但正如我意识到的那样,它们只给出了 Type。我知道我的问题可以通过将 Type 与我的类进行比较来解决,最后它会正常工作。但我希望有更好的模式。
Type type = building.GetType();
type.arrangeCeremony(); // arrange ceremony is public static method in all derived classes
感谢您的回答
答:
0赞
Marc Gravell
9/22/2023
#1
如果操作取决于类型:最合理的实现方式很简单:多态性。
因此:使方法成为非静态的,并将其移动到基类型,如 或 ,然后将其移动到子类型中。然后你不需要问建筑物它是什么类型:你只需要使用多态性virtual
abstract
override
building.ArrangeCeremony();
abstract class SomeBase {
public abstract void ArrangeCeremony();
}
class SomeConcrete : SomeBase {
public override void ArrangeCeremony() { /* code here */ }
}
如果不是所有类型都可以合理地实现该方法,那么也许可以创建一个 ,或者在某个合理的中间类型级别声明该方法,并使用类型测试:interface
if (building is ICeremonial ceremonial)
{
ceremonial.ArrangeCeremony();
}
class SomeBase { }
interface ICeremonial {
void ArrangeCeremony();
}
class SomeConcrete : SomeBase, ICeremonial {
public void ArrangeCeremony() { /* code here */ }
}
或
if (building is Ceremonial ceremonial)
{
ceremonial.ArrangeCeremony();
}
class SomeBase { }
abstract class Ceremonial : SomeBase {
public abstract void ArrangeCeremony();
}
class SomeConcrete : Ceremonial {
public override void ArrangeCeremony() { /* code here */ }
}
评论
0赞
a11ex
9/22/2023
谢谢!是的,我知道多态性。我不能使用它,因为我在大学里的愚蠢任务。我需要在每个类中都有静态方法,所以我不能使用虚拟
1赞
Marc Gravell
9/22/2023
@a11ex每个多态重写都可以只调用相关的静态方法吗?
0赞
a11ex
9/23/2023
哇,好主意,谢谢
评论
ArrangeCeremony()
ArrangeCeremony()
static