C#如何获取当前类实例相当于self php

时间:2013-01-17 22:14:54

标签: c# oop inheritance polymorphism

假设我们有这些类:

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 个答案:

答案 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'关键字,因为它是隐式的。