在没有实例化的情况下访问类中的属性

时间:2013-06-10 11:41:02

标签: c# class

让我说我有一个班级:

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"; }
    }
}

2 个答案:

答案 0 :(得分:6)

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

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

我知道没有其他方式(除了consts而且在某种意义上有限),我知道有无即时成员。

答案 1 :(得分:1)

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

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

并通过以下方式访问它:

string value = Foo.Bar;

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

在任何情况下,有时静态变量都有其用途,但不要过度使用。我个人总是试图尽可能地避免静态(特别是静态操作),原因有很多,例如,请参阅this post中的静态外观。

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

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