gpt4 book ai didi

C# "Inheriting"静态方法?

转载 作者:行者123 更新时间:2023-11-30 14:53:57 25 4
gpt4 key购买 nike

这是我想要完成的示例:

abstract class DoSomething
{
static void DoWhateverItIsThatIDo()
{
Console.WriteLine("You asked the abstract class to work. Too bad.");
}
}

class InspireMe : DoSomething
{
static void DoWhateverItIsThatIDo()
{
Console.WriteLine("You are amazing.");
}
}

class InsultMe : DoSomething
{
static void DoWhateverItIsThatIDo()
{
Console.WriteLine("You aren't worth it.");
}
}

class Program
{
static void Main()
{
DoSomething worker = InsultMe;
worker.DoWhateverItIsThatIDo();

worker = InspireMe;
worker.DoWhateverItIsThatIDo();
}
}

我来自 Python 背景,其中方法本身可以是一个变量,然后可以调用它。看起来 C# 没有这个概念,但我正在尝试完成类似的事情。

我的想法是我想要一个可以是抽象类型的变量,以便它可以存在许多不同种类的子类型。所有这些子类型都有特定的方法。我希望能够将这些子类型中的任何一个分配给这个抽象类型的变量,然后调用子类型中存在的 static 方法。

在 C# 术语中,我希望能够将 分配给一个变量,而不是该类的一个实例,然后调用该类的静态方法。

工厂听起来可能走在正确的道路上,但我不确定工厂本身如何能够生成对的这些引用(而不是创建实例)。

我可以修改它以使用实例,但假设我想要生成每种类型的类的静态方法,所有这些类仍然继承自基类型。

我觉得很可能有一种方法可以做到这一点 - 有人能给我建议吗?

最佳答案

在您所描述的意义上,您不能在 C# 中将类用作变量。反射本质上允许您将类型视为变量并动态调用它们的静态成员,但它会很困惑并且不安全。

你基本上可以通过使用单例模式来完成你想做的事情:

interface IDoSomething
{
void DoWhateverItIsThatIDo();
}

class DoSomething : IDoSomething
{
private DoSomething() {}
internal static readonly IDoSomething Instance;
static DoSomething()
{
Instance = new DoSomething();
}

public void DoWhateverItIsThatIDo()
{
Console.WriteLine("You asked the abstract class to work. Too bad.");
}
}

class InspireMe : IDoSomething
{
private InspireMe() {}
internal static readonly IDoSomething Instance;
static InspireMe()
{
Instance = new InspireMe();
}

public void DoWhateverItIsThatIDo()
{
Console.WriteLine("You are amazing.");
}
}

class InsultMe : IDoSomething
{
private InsultMe() {}
internal static readonly IDoSomething Instance;
static InsultMe()
{
Instance = new InsultMe();
}

public void DoWhateverItIsThatIDo()
{
Console.WriteLine("You aren't worth it.");
}
}
class Program
{
static void Main()
{
IDoSomething worker = InsultMe.Instance;
worker.DoWhateverItIsThatIDo();

worker = InspireMe.Instance;
worker.DoWhateverItIsThatIDo();
}
}

关于C# "Inheriting"静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com