gpt4 book ai didi

c# - 为什么在使用泛型时这个静态变量不会增加?

转载 作者:IT王子 更新时间:2023-10-29 04:13:28 29 4
gpt4 key购买 nike

我需要一个特定的类来包含一个静态成员,该成员每次实例化该类的实例时都会进行跟踪,本质上是为了让该类的每个实例都有一个唯一的索引。它适用于非泛型类,但只要实例之间的类型 T 不同,此泛型实现就会失败:

class A<T>
{
private static int counter;

private static int Counter {
get {
Increment();
return counter;
}
}

private static void Increment() {
counter++;
}

public int Index;

public A()
{
this.Index = Counter; // using A<T>.Counter makes no difference

Console.WriteLine(this.Index);
}
}


class Program
{
static void Main(string[] args)
{
var a = new A<string>();
var b = new A<string>();
var c = new A<string>();
var d = new A<int>();
}
}

输出是:

1

2

3

1

一旦类型 T 切换为 int 而不是 string,计数器就会重置。

这是设计使然失败吗?如果是这样,原因是什么?我该如何解决?或者这是一个错误?这在某种程度上是有道理的,因为泛型类型 T 在类声明中,但是..

最佳答案

每个不同TA<T> 创建一个新类以及因此不同的静态计数器。

要解决这个问题,您可以像这样使用继承:

abstract class A
{
protected static int counter;
}

class A<T> : A
{
private static int Counter {
get {
Increment();
return counter;
}
}

private static void Increment() {
counter++;
}

public int Index;

public A()
{
this.Index = Counter;

Console.WriteLine(this.Index);
}
}

关于c# - 为什么在使用泛型时这个静态变量不会增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8144109/

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