Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何实现这种类型的OOP结构?_C#_.net_Oop - Fatal编程技术网

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

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的车型

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

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我认为我们需要一个更完整的功能规范;)