[英]Is there an equivalent of 'this' in C# for static members?
是否有一个相当于this
在C#中的静态成员?
我喜欢用this
来使我的代码更具可读性,但是想知道是否有静态成员的等价物。
我想如果你使用this.
为了强调你指的是实例成员,静态成员中的等价物将是使用ClassName.
但在风格上,为什么添加不会改变含义的代码?
编辑以添加各种说明:
我的上一句话可以用这些例子来说明:
class Example1
{
public int J { get; set; }
public Example1()
{
J = 0;
}
// These two methods have *exactly* the same CIL
public int InstanceMethodLong()
{
return this.J;
}
public int InstanceMethodShort()
{
return J;
}
}
this.
在InstanceMethodLong
因为相比没有改变的意思InstanceMethodShort
。
静态:
class Example2
{
public static int K { get; set; }
static Example2()
{
K = 0;
}
// These two methods have *exactly* the same CIL
public int StaticMethodLong()
{
return Example2.K;
}
public int StaticMethodShort()
{
return K;
}
Example2.
在StaticMethodLong
因为相比没有改变的意思StaticMethodShort
。
在这两种情况下,添加限定符会产生相同的CIL,相同的行为,并且是写入,读取和理解的更多源。 风格上 - 我很高兴地接受这是一个代码风格的问题 - 我认为没有理由在那里。
使用下划线前缀,情况略有不同:
class Example3
{
int _j;
public int J
{
get { return _j; }
set
{
_j = value;
// and do something else,
// to justify not using an auto-property
}
}
public Example3()
{
J = 0;
}
public int MethodWithParameter(int j)
{
// Now there is a *difference* between
return j;
// and
return _j;
}
}
在这里,在MethodWithParameter
,引用_j
和j
之间存在差异 ,因此我们故意并明确地表达不同的含义。 确实,编译器并不关心我们所谓的变量名称,但它确实关心我们所指的变量! 所以在身体MethodWithParameter
,使用或不使用下划线不只是风格上,它的语义。 这不是我们在这个问题中解决的特殊问题。
由于静态成员不属于任何特定实例(因为this
指的是对象的实例,每个实例可能有不同的设置),所以您想要做的是使用ClassName.Member
而不是this.Member
。
public class Orange
{
public static string Tastes = "sweet";
public static string FoodType(){
return "fruit";
}
}
将被称为:
Console.WriteLine(Orange.Tastes);
静态方法也是如此:
Console.WriteLine(Orange.FoodType()).
请注意,这是一个仅供演示的人为举例。 :)
您可以使用类名来引用其他静态属性。
你的代码变得更容易复制/粘贴,但这并不总是坏事。
不幸的是,静态方法没有this
。 为了帮助区分静态成员和类成员,我在其前面添加了类名。
class Test {
static Regex TextRegex = new Regex(...);
public static bool TestString(string input) {
return Test.TextRegex.IsMatch(input);
}
}
我喜欢“这个”,也可以从状态正在发生变化的第一眼看出来。 在这种情况下,您可能需要考虑静态成员的类型名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.