让我说我有一个班级:
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"; }
}
}
答案 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表示法,因此它应为Bar
和Foo
。
另一种选择是注入一个为您提供值的提供程序组件。依赖注入容器负责处理此问题,您可以在应用程序启动时为其指定正确的生存期。然后可以轻松替换默认实现(例如,从配置文件中获取值)。同样,这一切都取决于你想要走多远,这个'价值'有多复杂,如果它只是一个字符串,保持简单:)