2017-02-18 90 views
-4

Я хочу использовать полиморфизм стиля Java в C#. Является ли это возможным?Полиморфизм стиля Java в C#?

Ниже приведен пример, который не компилируется

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; 
     } 

} 
} 

Сообщения является

MyClass.cs (11,4): CS0120 ошибки: Ссылка на объект требуется для доступа к нестатическому член `HelloWorld.Program.printID (HelloWorld.Shape) '

Спасибо!

+0

ой, это неловко, спасибо, Сергей. Прекрасно работает – Iodizer

ответ

6

Ошибка не связана с полиморфизмом - вы вызываете нестатический метод из статического метода Main. Вы также должны ставить printID.

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

Кроме того, я предлагаю вам:

  • палочке с C# именования руководящих принципов, когда вы пишете C# код. Методы и свойства должны иметь PascalCase.
  • Используйте свойство вместо общественных полех
  • Если любая форма должна иметь и идентификатор, рассмотрит для создания public Shape(int id) конструктора в базовом классе и вызвать этот конструктор из производных классов с помощью : base(id)
  • Улучшения имен - если вы передаете идентификатор, то переменной вызова id вместо k.