跟踪为类和子类创建的实例总数
本文关键字:实例 创建 子类 跟踪 | 更新日期: 2023-09-27 18:14:37
注意:这是家庭作业。
我有两个类,一个继承自另一个。赋值告诉我们要使类能够跟踪每个类创建的实例总数。
class FirstClass
{
private static int _instancesCreated = 0;
public FirstClass()
{
_instancesCreated++;
}
}
据我所知,这段代码运行得很好。问题是我有一个子类,它必须调用它的父类的构造函数。
class SecondClass:FirstClass
{
public SecondClass() : base()
{
}
}
所以现在的问题是如何正确地将两者分开。因为我必须调用父构造函数的_instancesCreated类将变得不正确,虽然我认为这是真的在某种意义上…?
谢谢你的帮助
最简单的方法是使_instancesCreated受保护,然后在每个子类构造函数中递减它。这就是如何使_instancesCreated仅存储基类实例的数量。要计算子类实例,您应该为每个子类添加静态字段,并在构造函数中增加它们,就像在基类中所做的那样。
class SecondClass:FirstClass
{
private static int _sub_instancesCreated = 0;
public SecondClass() : base()
{
_sub_instancesCreated ++;
}
}
分别
class FirstClass
{
private static int _instancesCreated = 0;
public FirstClass()
{
_instancesCreated++;
}
protected FirstClass(int i)
{
}
}
class SecondClass:FirstClass
{
private static int _sub_instancesCreated = 0;
public SecondClass() : base(2) //dummy
{
_sub_instancesCreated ++;
}
}
一个更通用的解决方案(如果有点夸张):
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
new BaseClass();
new BaseClass();
new DerivedClass();
Console.WriteLine("Base classes: {0}, Derived classes: {1}",
BaseClass.CountInstances<BaseClass>(),
BaseClass.CountInstances<DerivedClass>());
}
}
public class BaseClass
{
public static Dictionary<Type, int> InstanceCount =
new Dictionary<Type, int>();
public static int CountInstances<T>() where T : BaseClass
{
return BaseClass.InstanceCount.ContainsKey(typeof(T)) ? BaseClass.InstanceCount[typeof(T)] : 0;
}
public BaseClass()
{
if (!InstanceCount.ContainsKey(this.GetType()))
{
InstanceCount[this.GetType()] = 0;
}
InstanceCount[this.GetType()]++;
}
}
public class DerivedClass : BaseClass
{
public DerivedClass()
: base()
{
}
}
}