C#中的Java风格多态?

Iod*_*zer -4 c# polymorphism

我想在C#中使用Java样式多态.可能吗?

这是一个不编译的例子

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

}
}
Run Code Online (Sandbox Code Playgroud)

信息是

MyClass.cs(11,4):错误CS0120:访问非静态成员"HelloWorld.Program.printID(HelloWorld.Shape)"需要对象引用

谢谢!

Ser*_*kiy 6

错误与多态无关 - 您从静态方法调用非静态方法Main.你也应该制作printID静态.

public static void printID(Shape s){
    Console.WriteLine("id is " + s.id);
}
Run Code Online (Sandbox Code Playgroud)

我还建议你:

  • 在编写C#代码时,请坚持使用C#命名准则.方法和属性应具有PascalCase名称.
  • 使用属性而不是公共字段
  • 如果任何形状应该具有id,请考虑public Shape(int id)在基类中创建构造函数,并通过派生类调用该构造函数: base(id)
  • 改进命名 - 如果你传递id,那么调用变量id而不是k.