多厂商相机应用

时间:2017-07-14 13:16:12

标签: c# inheritance camera

也许是一个新手问题,但我想编写一个与多个供应商相机接口的应用程序。我想编写一个将成为基类的Camera类,以便在运行时我可以将它初始化为给定的供应商:

public class BaseClass
{
public void Connect(){}
public void Disconnect(){}
// common methods for cameras
}

public class VendorXCamera: Camera, VendorX_SDK_object
{}
public class VendorYCamera: Camera, VendorY_SDK_object
{}

BaseClass c_cam;
//choose Camera X or Y
c_cam = new VendorXCamera();
c_cam.Connect();

现在我知道由于C#中存在多重继承限制,我无法通过这种方式实现这一点,并且我不会侥幸逃脱界面。应该如何以正确的方式完成?

1 个答案:

答案 0 :(得分:1)

通过实现接口ICamera,可以实现不同供应商的相机的可交换性。请注意,您可以从任意多个接口继承,但只能从C#中的一个类继承。

如果您想共享相机常用方法的实现,则无法在界面中执行此操作,但您必须创建包含此方法的基类。由于该基类的某些功能可能依赖于具体的供应商sdk,因此您可以将某些函数声明为 abstract ,并在特定于供应商的子类中实现它们。因此,您不应该继承VendorX_SDK_object和VendorY_SDK_object,但是ruther会将其作为您子类的属性。

public interface ICamera{
   void Connect();
   void Disconnect();
}

abstract class CameraBase:ICamera
{
   protected abstract void OpenStream();
   protected abstract void CloseStream();

   public void Connect(){
      Debug.WriteLine("connecting");
      OpenStream();
      Debug.WriteLine("connected");
   }
   public void Disconnect(){
      Debug.WriteLine("connecting");
      CloseStream();
      Debug.WriteLine("connected");
   }
}

class VendorXCamera: CameraBase
{
   private VendorX_SDK_object vendorx_sdk_object;

   protected override void OpenStream(){
      vendorx_sdk_object.OpenStream(..);
   }
   protected override void CloseStream(){
      vendorx_sdk_object.CloseStream(..);
   }

}

class VendorYCamera: CameraBase
{
   private VendorY_SDK_object vendory_sdk_object;

   protected override void OpenStream(){
      vendory_sdk_object.OpenStream(..);
   }
   protected override void CloseStream(){
      vendory_sdk_object.CloseStream(..);
   }

}