Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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# 连接不同的类_C# - Fatal编程技术网

C# 连接不同的类

C# 连接不同的类,c#,C#,我正在为两个摄像头品牌编写一个界面,摄像头的界面是不同的。他们有不同的sdk,但操作是相同的缩放平移 所以我需要两个类来做这个,我不知道如何进一步解释,所以我将展示和举例: class program { public void main(string Brand) { CameraController controller; if( Brand == "A" ) controller = new BrandACamera

我正在为两个摄像头品牌编写一个界面,摄像头的界面是不同的。他们有不同的sdk,但操作是相同的缩放平移 所以我需要两个类来做这个,我不知道如何进一步解释,所以我将展示和举例:

class program
{
    public void main(string Brand)
    {
        CameraController controller;

        if( Brand == "A" )
            controller = new BrandACameraController();
        else
            controller = new BrandBCameraController();

        controller.Pan(); //pan with chosen camera brand
    }
}

class BrandACameraController
{
    public BrandACameraController()
    { 

    }

    public void Pan()
    {
        //interface with brand a camera
    }

    public void Tilt()
    {
        //interface with brand a camera
    }

    public void Zoom()
    {
        //interface with brand a camera
    }
}

class BrandBCameraController
{
    public BrandBCameraController()
    { 

    }

    public void Pan()
    {
        //interface with brand b camera
    }

    public void Tilt()
    {
        //interface with brand b camera
    }

    public void Zoom()
    {
        //interface with brand b camera
    }
}
我该怎么做

创建一个包含所有共享方法和属性的接口。 在BrandACameraController类和BrandBCameraController类中实现该接口 在任何地方都可以使用该接口,但实际上必须创建具体类的地方除外。 以你为例:

interface ICameraController
{
    void Pan();
    void Tilt();
    void Zoom();
}

class BrandACameraController: ICameraController
{
    public BrandACameraController()
    {

    }

    public void Pan()
    {
        //interface with brand a camera
    }

    public void Tilt()
    {
        //interface with brand a camera
    }

    public void Zoom()
    {
        //interface with brand a camera
    }
}

class BrandBCameraController: ICameraController
{
    public BrandBCameraController()
    {

    }

    public void Pan()
    {
        //interface with brand b camera
    }

    public void Tilt()
    {
        //interface with brand b camera
    }

    public void Zoom()
    {
        //interface with brand b camera
    }
}
您可能还应该制作一个CameraController Factory来封装创建它们:

static class CameraControllerFactory
{
    public static ICameraController Create(string brand)
    {
        if (brand == "A")
            return new BrandACameraController();
        else
            return new BrandBCameraController();
    }
}
然后,示例中检查Brand以查看要创建什么的代码将如下所示:

ICameraController controller = CameraControllerFactory.Create(Brand);

controller.Pan(); //pan with chosen camera brand

这正是接口的目的:

interface ICameraController
{
    void Pan();
    void Tilt();
    void Zoom();
}
class BrandACameraController : ICameraController { ... }
class BrandBCameraController : ICameraController { ... }

然后,当您将控制器存储在上面的main方法中时,您可以使用类型ICameraController进行存储。如果您想在实现之间共享一些代码,您可能还希望从公共基类派生实现,或者不使用接口。

其他答案使用接口,这很好。您还可以使用另一个选项,即定义抽象基类,并使不同的相机品牌继承自该基类:

abstract class CameraController
{
    public abstract void Pan();
    public abstract void Tilt();
    public abstract void Zoom();
}

class BrandACameraController : CameraController
{      
    public override void Pan()
    {
        //interface with brand a camera
    }

    public override void Tilt()
    {
        //interface with brand a camera
    }

    public override void Zoom()
    {
        //interface with brand a camera
    }
}

class BrandBCameraController : CameraController
{      
    public override void Pan()
    {
        //interface with brand b camera
    }

    public override void Tilt()
    {
        //interface with brand b camera
    }

    public override void Zoom()
    {
        //interface with brand b camera
    }
}
公共接口A { 孔隙试验

    int TestApp(int input);
}

public interface B
{
    void Test();

    int TestApp(int input);
}

public class Testing : A, B
{
    void A.Test()
    {
        throw new NotImplementedException();
    }

    int B.TestApp(int input)
    {
        throw new NotImplementedException();
    }

    void B.Test()
    {
        throw new NotImplementedException();
    }

    int A.TestApp(int input)
    {
        throw new NotImplementedException();
    }
}

public class TestingApp
{
    public void DoOperation()
    {
        A testing = new Testing();
        // This will call interface A method
        testing.Test();
        B testing1 = new Testing();
        // This will call interface B method
        testing1.Test();
        //testing.Test();
    }
}

与接口相比,它的优点或缺点是什么?优点是您可以从抽象类而不是从接口继承功能。这样,您可以轻松地与从抽象类继承的类共享代码。您还可以结合使用这两个选项。定义一个接口,并让您的abstract类实现面对面。