0

假设我们有这些类:

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。我怎样才能做到这一点?

4

4 回答 4

2

这基本上是不可能的。

B.getAttribute()编译为A.getAttribute().

于 2013-01-17T22:16:54.167 回答
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;
    }
}
于 2013-01-17T22:16:23.047 回答
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);
于 2013-01-17T22:21:48.940 回答
0

您可以通过“this”关键字获取当前类实例。显然,您不能在静态方法中访问它,因为根据定义,静态方法在没有特定实例的上下文的情况下执行。

另一方面,要从同一个类中访问成员变量/属性/方法,您根本不需要 'this' 关键字,因为它是隐式的。

于 2013-01-17T22:27:24.593 回答