C# 更新基类值,以便同时更新所有派生类

C# 更新基类值,以便同时更新所有派生类,c#,derived-class,C#,Derived Class,我希望减少我正在工作的东西的内存需求,但在一些派生类中遇到了问题。目前,我有4个派生类,它们继承相同的基类并重写相同的方法,但是对于每个派生类,重写方法中的函数是不同的。这有助于清理大量代码,并使维护更加容易。但是,每个派生类都有一个long[,]File\u Vals全局变量,该变量变得非常大。下面是如何设置这些类的 公共类基类{ 公共长[,]文件; 公共int最大行数; 内部无效DoWork(){} } 公共类FirstDerivedClass:基类 { public-DerivedClas

我希望减少我正在工作的东西的内存需求,但在一些派生类中遇到了问题。目前,我有4个派生类,它们继承相同的基类并重写相同的方法,但是对于每个派生类,重写方法中的函数是不同的。这有助于清理大量代码,并使维护更加容易。但是,每个派生类都有一个
long[,]File\u Vals
全局变量,该变量变得非常大。下面是如何设置这些类的

公共类基类{
公共长[,]文件;
公共int最大行数;
内部无效DoWork(){}
}
公共类FirstDerivedClass:基类
{
public-DerivedClass(长[,]个文件值,整数最大行)
{
文件值=文件值;
最大行数=最大行数
}
内部新的空榫()
{
//做些有用的事情
}
}
公共类SecondDerivedClass:基类
...
公共类测试
{
第一个派生类第一个派生类;
二次派生类二次派生类;
第三驱动类第三驱动类;
第四派生类第四派生类;
公共无效设置(长[,]个文件\u值,int max\u行)
{
firstDerived=新的FirstDerivedClass(文件值,最大行数);
secondDerived=新的SecondDerivedClass(文件值,最大行数);
ThirdDrived=新的ThirdDriveClass(文件值,最大行数);
fourthDerived=新的FourthDerivedClass(文件值,最大行数);
}
...
公共void DoStuff(长[,]个文件值,int max_行)
{
//文件\u值和最大\u行的更新版本。
}
}
有4组
文件\u值必须更新。有没有办法只更新父类/基类,从而更新其他派生类/子类?或者是否有一种方法,每个派生类/子类都没有自己版本的
文件\u值
对象,并且它们都只能访问其中一个?现在,
File\u values
对象中可以有1200万行或更多行,因此需要考虑内存使用情况

有4组文件_值需要更新

不,在问题中的代码中只有一个
long[,]
(因为数组是)的共享实例和对它的4个引用。您可以使用下一个代码轻松检查它:

Setup(new long[1,1], 1);
Console.WriteLine(object.ReferenceEquals(firstDerived.File_Vals, secondDerived.File_Vals)); // prints True 
所以基本上你有
32*4
64*4
位的“开销”取决于平台


您可以将
文件\u Vals
字段
设为只读
,以防止为其分配另一个值(参考),或者更好的是,设为get only属性。

在您的代码中,4个派生类共享相同的
long[,]
实例。您正在将相同的对象传递给它们中的每一个。@JohnathanBarclay是的,现在它们就是这样设置的,但这意味着内存中有5个
long[,]
项,长度超过1200万行。这会占用大量内存,我正在尝试减少这些内存…不,没有5个
长[,]
实例
long[,]
是一种引用类型,因此每个派生类都在内存中保存对同一对象的引用。除非你要重新分配一个没有显示的地方。@JohnathanBarclay哦……好的。我想我的大脑已经忘记了
long[,]
是引用类型。。。。