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