【发布时间】:2011-05-08 11:18:32
【问题描述】:
假设我有一个声明如下的结构:
public struct Test
{
public static int Width = 5;
...
public static int[] Value = new int[1]{ 0 };
}
现在我想做的是从另一个结构中调用它,但我必须知道如何。我正在尝试做的事情(在我看来)如下所示:
public struct AnotherStruct
{
public (type of struct) this[int key]
{
get
{
switch(key)
{
case 1:
return (another struct);
default:
return null;
}
}
}
}
我的最终目标是我想使用如下所示的代码,而不必创建对象的实例:
structobject s = new AnotherStruct[5];
所以这个“查找表”将在另一个项目中创建并构建,然后作为我的主项目中的 dll 调用。由于我在其他地方构建 dll 并调用它,我希望我可以将 dll 加载到内存中一次,然后我可以从我的主项目中引用该内存。然后我将分配一部分内存,我的代码将只引用它,避免创建此查找表的各个实例(从而避免分配内存和存储新实例所需的时间开销)。从长远来看,我节省的时间会非常有益,所以我希望我能以某种方式让它发挥作用。
我希望这不会太令人困惑,但如果需要任何澄清,请告诉我。
编辑 这是在网站上使用的,所以我真的需要一个在所有连接中持续存在的对象,并且在最初加载代码时创建一次。相同的想法,但也许这会带来更简单的解决方案?
【问题讨论】:
-
看起来你需要一个工厂模式。
-
@Etienne de Martel 您能否创建一个简短的示例,说明从 dll 的角度和在主项目中如何工作。真的没有什么花哨的。我以前从未使用过工厂模式,我有限的研究表明它似乎相当复杂。
-
细微差别:结构体是值类型,因此为了能够返回 null,您需要使用特殊的可空结构体类型
Nullable<Test>或Test?。 -
我可以返回 null 以外的值,但感谢您的提醒。
-
奇怪的是,您认为您需要一个
struct来跨连接持续存在并且只创建一次。有许多更有效的方法来处理这个问题(在你的 global.asax.cs 的Application_Start(..)中创建一个缓存在应用程序级别的单例。将结构用于这种通用目的可以是dangerous
标签: c# struct lookup-tables