2017-02-18 12 views
-4

C#でJavaスタイルの多態性を使いたいです。出来ますか?エラーCS0120:オブジェクト参照が非静的アクセスするために必要とされる。ここでC#のJavaスタイルの多態性?

メッセージが

MyClass.cs(11,4)である

using System; 

namespace HelloWorld 
{ 
public class Program 
{ 
    public static void Main (string[] args) 
    { 
     Triangle triangle = new Triangle(2); 
     Square square = new Square(3); 
     printID(square); 
    } 

    public void printID(Shape s){ 
      Console.WriteLine ("id is " + s.id); 
    } 
} 

public class Shape{ 
     public int id; 
} 

public class Triangle: Shape{ 
     float b; 
     float height; 

     float area(){ 
      return b*height/2; 
     } 

     public Triangle(int k){ 
      id=k; 
     } 
} 

public class Square: Shape{ 
     float side; 

     float area(){ 
      return side*side; 
     } 

     public Square(int k){ 
       id=k; 
     } 

} 
} 

をコンパイルしない例でありますメンバ `HelloWorld.Program.printID(HelloWorld.Shape) '

ありがとう!

+0

私は、恥ずかしいです、感謝セルゲイ。今すぐうまくいく – Iodizer

答えて

6

エラーは多型に関連していません - 静的メソッドMainから非静的メソッドを呼び出しています。 printIDも静的にする必要があります。あなたがC#のコードを書いているとき、C#はガイドラインを命名して

  • スティック:

    public static void printID(Shape s){ 
        Console.WriteLine("id is " + s.id); 
    } 
    

    はまた、私はあなたを示唆しています。メソッドとプロパティには、PascalCaseの名前が必要です。

  • 使用特性の代わりに、公共の場
  • 任意の形状を持っているとid、命名改善: base(id)
  • を経由して派生クラスからのコンストラクタを基底クラスでpublic Shape(int id)コンストラクタを作成して呼び出すために検討すべきである場合
  • - そして、あなたはIDを渡している場合は、 kの代わりに変数 idを呼び出します。