我正在使用 C#.NET 并且基本上有一个包含许多区域的页面。
在我的代码隐藏中,我基本上希望能够执行以下操作:
bool result1 = MyClass.Section["area1"].Process();
bool result4 = MyClass.Section["area4"].Process();
我需要编写一个类来调用某种“ Process
”方法,并能够让它area1
在该方法中接受像“”这样的参数。
任何帮助我开始这方面的帮助将不胜感激,谢谢!
按照正常的 .NET 命名约定,我假设您的意思是,通过您的示例,它MyClass
是静态引用的,而不是通过实例引用的(这可能不是一个大的变化)。鉴于该假设,您似乎有一个类似的类:
static class MyClass
{
public static IIndexer Section { get; }
}
IIndexer
在这种情况下,可以是任何实现索引器属性的类型,该属性接受一个字符串并返回一个类型,该类型具有一个名为的方法,该方法Process
又返回一个bool
. IIndexer
理论上可能看起来像:
interface IIndexer
{
ISomething this[string] { get; }
}
接下来我们将ISomething
用一个简单的IProcess
接口来填补上面的空白,这样我们就不必了解您的具体实现:
interface IProcess
{
bool Process();
}
所以现在上面的索引器可以改成:
IProcess this[string] { get; }
当然,以上都没有任何真正的可执行代码,但概述了完成您所追求的所需的对象。现在,当您使用已履行的合约运行代码时,调用链非常简单:
bool result1 = MyClass.Section["area1"].Process();
// MyClass.Section > IIndexer.this[string] > IProcess.Process
为了 POC 这个想法,模拟 IIndexer 实现的一个好方法可能是使用它,Dictionary<string, IProcess>
因为它会为您提供一个可用的索引器来满足您的目的。