我如何实现这种类型的OOP结构?

时间:2008-12-29 21:45:05

标签: c# .net oop

我想构建一个漂亮的API(C#),让人们更容易消费,我想我以前见过这个并想知道如何做到这一点:

MyNamespace.Cars car = null;

if(someTestCondition)
       car = new Honda();
else    
       car = new Toyota();

car.Drive(40);

这可能吗?如果是这样,需要做什么?

7 个答案:

答案 0 :(得分:10)

Interface Car
{
void Drive(int miles);
}

class Honda : Car
{
...
}
class Toyota : Car
{
...
}

答案 1 :(得分:6)

你可以通过几种不同的方式做到这一点。您可以声明一个抽象基类,也可以使用对象实现的接口。我相信“C#”首选方法是拥有一个接口。类似的东西:

public interface ICar
{
    public Color Color { get; set; }

    void Drive(int speed);
    void Stop();

}

public class Honda : ICar
{

    #region ICar Members

    public Color Color { get; set; }

    public void Drive(int speed)
    {
        throw new NotImplementedException();
    }

    public void Stop()
    {
        throw new NotImplementedException();
    }

    #endregion
}

public class Toyota : ICar
{
    #region ICar Members

    public Color Color { get; set; }

    public void Drive(int speed)
    {
        throw new NotImplementedException();
    }

    public void Stop()
    {
        throw new NotImplementedException();
    }

    #endregion
}

答案 2 :(得分:5)

我看到每个人都在推动界面/抽象基类更改。您提供的伪代码或多或少意味着您已经实现了这一点。

我会提出别的建议:

您需要创建一个“CarFactory”,它将返回基类/接口的特定实现。 Create方法可以将您的测试条件作为参数,以便您创建正确的汽车。

编辑:以下是来自MSDN的链接 - http://msdn.microsoft.com/en-us/library/ms954600.aspx

编辑:请参阅其他链接的评论。

答案 3 :(得分:1)

创建一个名为Cars的课程。给它Drive方法。扩展本田和丰田课程中的基础课程。

答案 4 :(得分:0)

namespace MyNameSpace
{
  public interface Cars
  {
    public void Drive(int miles);
  }
  public class Honda : Cars
  {
    public void Drive(int miles) { ... }
  }
  public class Toyota : Cars
  {
    public void Drive(int miles) { ... }
  }
}

答案 5 :(得分:0)

不要忘记命名空间,也请参阅我关于变量名称的问题的评论

namespace MyNamespace {
    public interface Cars {
        void Drive(int speed);
    }

    public class Honda : Cars {
        public void Drive(int speed) { 
        }
    }
    public class Toyota : Cars {
        public void Drive(int speed) {

        }
    }
}

答案 6 :(得分:0)

使用名为Drive()的抽象方法创建一个名为Cars的抽象类。对它进行子类化并添加实现。