繁体   English   中英

C#如何获取与自已PHP等效的当前类实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM