当编译器抱怨这个时,我有点意外:
public class UsefulClass
{
public const String RatingName = @"Ratings\rating";
}
public class OtherClass
{
public void SomeFunc()
{
UsefulClass useful = new UsefulClass();
String rating = useful.RatingName;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器说,"无法使用实例引用访问静态成员;而是使用类型名称对其进行限定"
这不是问题,String rating = UsefulClass.RatingName;工作正常.我只是好奇这背后的想法是什么?我有一个带有公共常量的公共类的实例,为什么我不能以这种方式获取数据?
Bol*_*ock 31
因为常量不是实例成员; 他们与各自的类型有着静态的联系.以同样的方式,您无法使用实例调用静态方法,您无法使用实例访问类常量.
如果您需要在不知道第一手类型的情况下获得实例的常量,我想您可以根据其类型使用反射来实现.
如果您尝试添加无法修改但与实例相关的成员,则可能需要只读字段或属性.
Ree*_*sey 14
标记的"变量" const是编译时构造,而不是实例成员.您可以像访问静态变量一样访问它:
public void SomeFunc()
{
UsefulClass useful = new UsefulClass();
String rating = UsefulClass.RatingName; // Access as if static
}
Run Code Online (Sandbox Code Playgroud)
话虽这么说,我会亲自将它包装成一个属性,如果它的意思是按你所描述的那样使用,就像这样:
public class UsefulClass
{
private const string ratingName = @"Ratings\rating";
public string RatingName { get { return ratingName; } }
}
Run Code Online (Sandbox Code Playgroud)
这将使您的语法工作,但也是一个更好的设计,IMO,因为它不公开暴露您的常量.