[英]C# how to get current class instance equivalent to self php
假设我们有这些类:
class A {
public string attr = "Class A";
public static void getAttribute(){
self currentClass = new self(); // equivalent to php
Console.Write("Attribute : " + currentClass.attr);
}
}
Class B : A {
public string attr = "Class B";
}
B = new B();
B.getAttribute();
我想要B.getAttribute();
打印Attribute: Class B
我怎样才能做到这一点?
从根本上讲这是不可能的。
B.getAttribute()
编译为A.getAttribute()
。
我可能知道您要做什么,但是我必须告诉您,这种PHP方法在C#中毫无意义。 我不鼓励您使用它。
public class A
{
private String attr = "Class A";
public static String getAttribute()
{
return (new A()).attr;
}
}
public class B : A
{
private String attr = "Class B";
public static String getAttribute()
{
return (new B()).attr;
}
}
如果您要问如何在C#中执行类似的操作,我认为答案将是:
public class A
{
public virtual string attr
{
get { return "Class A" }
}
public void getAttribute(){
Console.Write("Attribute : " + attr);
}
}
public class B : A
{
public override string attr
{
get { return "Class B"; }
}
}
var b = new B();
b.getAttribute();
关于我在另一个答案中的评论,如果您需要getAttribute为静态,则可以通过以下方式实现它:
public static void getAttribute(A obj){
Console.Write("Attribute : " + obj.attr);
}
然后,您可以这样称呼它:
var b = new B();
A.getAttribute(b);
您可以通过“ this”关键字获取当前的类实例。 显然,您无法在静态方法中访问它,因为根据定义,静态方法将在没有特定实例的上下文的情况下执行。
另一方面,要从同一类内部访问成员变量/属性/方法,则根本不需要'this'关键字,因为它是隐式的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.