[英]Update Base class values so all derived classes are also updated
我希望減少我正在工作的東西的內存需求,並且遇到了一些派生類的問題。 目前我有 4 個繼承相同基類並覆蓋相同方法的派生類,但是每個派生類的覆蓋方法中的函數是不同的。 這有助於清理大量代碼並使維護更容易。 然而,每個派生類都有一個long[,] File_Vals
全局變量,它變得非常大。 以下是課程的設置方式。
public class BaseClass {
public long[,] File_Vals;
public int Max_rows;
internal void DoWork(){}
}
public class FirstDerivedClass : BaseClass
{
public DerivedClass(long[,] file_values, int max_rows)
{
File_Vals = file_values;
Max_rows = max_rows
}
internal new void DoWork()
{
// does work stuff
}
}
public class SecondDerivedClass : BaseClass
...
public class Testing
{
FirstDerivedClass firstDerived;
SecondDerivedClass secondDerived;
ThirdDerivedClass thirdDerived;
FourthDerivedClass fourthDerived;
public void Setup(long[,] file_values, int max_rows)
{
firstDerived = new FirstDerivedClass(file_values, max_rows);
secondDerived = new SecondDerivedClass(file_values, max_rows);
thirdDerived = new ThirdDerivedClass(file_values, max_rows);
fourthDerived = new FourthDerivedClass(file_values, max_rows);
}
...
public void DoStuff(long[,] file_values, int max_rows)
{
// updated versions of file_values and max_rows.
}
}
有了這個,有 4 組File_values
必須更新。 有沒有辦法只需要更新父類/基類,從而更新其他派生類/子類? 或者有沒有辦法讓每個派生/子類沒有自己的File_values
對象版本,並且只有一個他們都可以訪問? 現在File_values
對象可以包含 1200 萬行或更多行,因此需要考慮內存使用情況。
有了這個,有 4 組 File_values 必須更新
不,在您的問題代碼中,只有一個long[,]
共享實例(因為數組是引用類型)和 4 個對它的引用。 您可以使用下一個代碼輕松檢查它:
Setup(new long[1,1], 1);
Console.WriteLine(object.ReferenceEquals(firstDerived.File_Vals, secondDerived.File_Vals)); // prints True
所以基本上你有32*4
或64*4
位的“開銷”取決於平台。
您可以將File_Vals
字段設置為readonly
,以防止為其分配另一個值(引用),或者更好的 get-only 屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.