C# 如何实现这种类型的OOP结构?
我想构建一个很好的API(C#),让人们更容易消费,我想我以前见过这一点,我想知道如何做到这一点:C# 如何实现这种类型的OOP结构?,c#,.net,oop,C#,.net,Oop,我想构建一个很好的API(C#),让人们更容易消费,我想我以前见过这一点,我想知道如何做到这一点: MyNamespace.Cars car = null; if(someTestCondition) car = new Honda(); else car = new Toyota(); car.Drive(40); 这可能吗?如果是,需要做什么 创建一个名为Cars的类。给它一个驱动方法。在您的本田和丰田车型中扩展该基础车型。创建一个名为Cars的车型
MyNamespace.Cars car = null;
if(someTestCondition)
car = new Honda();
else
car = new Toyota();
car.Drive(40);
这可能吗?如果是,需要做什么 创建一个名为Cars的类。给它一个驱动方法。在您的本田和丰田车型中扩展该基础车型。创建一个名为Cars的车型。给它一个驱动方法。在您的本田和丰田车型中扩展这一基础车型。您可以通过几种不同的方式来实现这一点。您可以声明一个抽象基类,也可以拥有一个对象实现的接口。我相信“C#”首选的方法是有一个接口。比如:
Interface Car
{
void Drive(int miles);
}
class Honda : Car
{
...
}
class Toyota : Car
{
...
}
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
}
你可以用几种不同的方法来做。您可以声明一个抽象基类,也可以拥有一个对象实现的接口。我相信“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
}
别忘了名称空间,也可以在关于变量名的问题中看到我的评论
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) {
}
}
}
别忘了名称空间,也可以在关于变量名的问题中看到我的评论
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) {
}
}
}
使用名为Drive()的抽象方法创建一个名为Cars的抽象类。子类化它并添加实现。使用名为Drive()的抽象方法创建一个名为Cars的抽象类。子类化它并添加实现。我看到每个人都在向您推接口/抽象基类更改。您提供的伪代码或多或少意味着您已经准备好了 我会摆出一些其他的姿势: 您需要创建一个“CarFactory”,它将返回基类/接口的特定实现。创建方法可以将您的测试条件作为参数,以便您创建正确的汽车 编辑:这里有一个来自MSDN的链接--
编辑:查看注释以获得另一个链接。我看到每个人都在向您推送接口/抽象基类更改。您提供的伪代码或多或少意味着您已经准备好了 我会摆出一些其他的姿势: 您需要创建一个“CarFactory”,它将返回基类/接口的特定实现。创建方法可以将您的测试条件作为参数,以便您创建正确的汽车 编辑:这里有一个来自MSDN的链接--
编辑:另一个链接见评论。你比我快。我将删除我的,这应该是接口ICar@foson-我一开始是这样做的,但是我把它改成了Car,这样它就可以与他的示例代码相匹配。@ocdecio.myopenid.com,然后把你的类行改成使用“Car”而不是“ICar”=]你比我强。我将删除我的,这应该是接口ICar@foson-我一开始是这样做的,但将其更改为Car,以便与他的示例代码相匹配。@ocdecio.myopenid.com,然后将您的类行更改为使用“Car”而不是“ICar”=]我希望您不要期望两辆车都是基于单一的Car.Drive方法调用驱动的。本田和丰田章男的变量名称必须不同。我更改了代码以使其更准确,谢谢。我希望您不要期望两辆车都是基于单一的car.Drive方法调用来驾驶的。你的本田和丰田章男的变量名称必须不同。我更改了代码以使其更准确,谢谢。根据对他的问题的更改,我认为你的答案现在最适合。发布一个示例将非常有用,因为他可能以前没有处理过工厂问题。以一个抽象的工厂为例。根据他问题的变化,我认为你的答案现在是最合适的。发布一个例子会非常有帮助,因为他可能以前没有处理过工厂问题。以一个抽象的工厂为例。有趣的是,我们中的一些人在行驶数英里时看到了这一点,而另一些人则认为这是汽车行驶的速度。A我认为我们需要一个更完整的功能规范;)有趣的是,我们中的一些人在行驶数英里时看到了这一点,而我们中的其他人则将其视为汽车行驶的速度。A我认为我们需要一个更完整的功能规范;)