3

假设我有一堂课:

public class foo
{

    public string bar 
    {
        get { return "A Value"; }
    }
}

如果我只想访问 bar 中包含的值,并且我对实际的类不感兴趣,我可以执行以下操作:

string value = new foo().bar;

这真的是获取价值的最佳方式吗?我不想使这个属性(和类)静态。

如果我有很多带有我想访问的 bar 属性的类,会有更通用的方法吗?

编辑:它不是静态的原因是它是一个被覆盖的属性,我认为它不能是静态的:

public class parent
{
    public abstract string bar { get; }
}

public class foo : parent
{
    public override string bar
    {
        get { return "A Value"; }
    }
}
4

2 回答 2

7

您需要使用staticwhich 允许没有实例的方法和属性:

public class foo
{
    public static string bar 
    {
        get { return "A Value"; }
    }
}

我知道没有其他方法(除了 consts,这在某种意义上是有限的)拥有即时成员。

于 2013-06-10T11:42:00.680 回答
1

根据您的示例,我假设该值是一个常量,因此static您可以使用 a const(大致相同但更明确),而不是使用属性:

public class Foo
{
    public const string Bar = "A value";
}

并通过以下方式访问它:

string value = Foo.Bar;

...但这取决于你想用这个变量做什么——所以也许你可以详细说明一下。

无论如何,有时静态变量有其用途,但不要过度使用。出于多种原因,我个人总是尽量避免使用静态(特别是静态操作),例如,请参阅本文中的静态外观。

另请注意,公共属性和类名应遵循 Pascal 表示法,因此应为Barand Foo

另一种选择是注入为您提供价值的提供者组件。依赖注入容器会处理这个问题,您可以在应用程序启动时为其指定正确的生命周期。然后可以轻松替换默认实现(例如从配置文件中获取值)。同样,这一切都取决于您想要走多远以及这个“值”有多复杂,如果它只是一个字符串,请保持简单:)

于 2013-06-10T11:51:58.837 回答