gpt4 book ai didi

c# - 如何为每个子类继承具有唯一值的静态属性?

转载 作者:太空狗 更新时间:2023-10-30 00:07:59 69 4
gpt4 key购买 nike

我有一系列对象,我们称它们为建筑物,每个对象都共享特定的属性,这些属性对于该建筑物是静态的,但对于每座建筑物都不同,例如价格。我认为实现它的最佳方法是创建一个具有共享价格属性的抽象父类(super class)并在每个子类中设置值,但我不知道如何让它工作。这是我尝试过的示例:

using System;
public abstract class Buildings
{
internal static int price;
internal static int turnsToMake;
}
using System;
public class Walls : Buildings
{
public Walls()
{
price = 200;
turnsToMake = 5;
}
}

这对于构造来说效果很好,但如果我想在创建它之前检查价格(检查玩家是否有足够的钱),那么它只会返回一个空值。我确定这是一个 super 简单的修复,但我无法弄清楚。有帮助吗?

最佳答案

有一个“不完整”但简单的解决方案值得考虑。如果您将基类定义为通用类,并且在派生类中将 T 设置为类本身,它将起作用。

发生这种情况是因为 .NET 为每个新定义静态定义了一个新类型。

例如:

class Base<T>
{
public static int Counter { get; set; }

public Base()
{
}
}

class DerivedA : Base<DerivedA>
{
public DerivedA()
{
}
}

class DerivedB : Base<DerivedB>
{
public DerivedB()
{
}
}

class Program
{
static void Main(string[] args)
{

DerivedA.Counter = 4;
DerivedB.Counter = 7;

Console.WriteLine(DerivedA.Counter.ToString()); // Prints 4
Console.WriteLine(DerivedB.Counter.ToString()); // Prints 7

Console.ReadLine();
}
}

关于c# - 如何为每个子类继承具有唯一值的静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786562/

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