假设我们有这些类:
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
。我怎么能这样做?
答案 0 :(得分:2)
这根本不可能。
B.getAttribute()
汇编为A.getAttribute()
。
答案 1 :(得分:1)
我可能知道你要做什么,但我必须告诉你,这种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;
}
}
答案 2 :(得分:0)
如果您在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);
答案 3 :(得分:0)
您可以通过'this'关键字获取当前的类实例。显然,您无法在静态方法中访问它,因为根据定义,静态方法在没有特定实例的上下文的情况下执行。
另一方面,要从同一个类中访问成员变量/属性/方法,根本不需要'this'关键字,因为它是隐式的。