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 に答える