是否可以阻止对类的成员变量的某些方法调用

时间:2013-09-06 12:05:55

标签: c# .net windows-phone

我需要在Windows Phone 8的默认相机类之上创建一个Camera类,PhotoCaptureDevice

理想情况下,我想要建立一个子类

class CustomCaptureDevice:PhotoCaptureDevice{
    ....
    ....
}

这将允许我配置相机设备,并通过CustomCaptureDevice提供一些额外的帧处理技术。不幸的是,PhotoCaptureDevicesealed class,因此我不能这样做。

现在我可以想出两种可以帮助我解决问题的替代方法:

(1)

class CustomCaptureDevice
{
    private PhotoCaptureDevice captureDevice;

    // Implement all the functions of PhotoCaptureDevice here. And internally redirect them to PhotoCaptureDevice

}

上述方法过于繁琐。如果对PhotoCaptureDevice进行任何API更改,可能需要对CustomCaptureDevice类进行重大更新。

(2)

class CustomCaptureDevice
{
    public PhotoCaptureDevice captureDevice;

    // Expose this variable to the user, who can set things in PhotoCaptureDevice as per his needs.

}

以上似乎是一个更简单的解决方案,因为如果对PhotoCaptureDevice进行API更改,它将需要最少的更新。

似乎(2)可以很好地满足我的要求。但我有一个额外的要求,因为(2)可能证明不合适。我想在PhotoCaptureDevice中禁用某些配置功能,因为我想保留一些参数,如曝光和焦点,用户无法配置。

我如何在(2)的设计框架中实现这一点。它有可能吗?

据我所知,方法(1)很容易实现。请注意PhotoCaptureDevice密封类的约束。

1 个答案:

答案 0 :(得分:0)

第一种方法通常称为decorator pattern(即包装器)。我相信这正是您需要的东西,因为它允许您为引擎下的给定接口提供任何功能。

要使类与应用程序的其他部分中的PhotoCaptureDevice互换,您必须实现其相关接口:

public class ExtendedPhotoCaptureDevice : IDisposable, ICameraCaptureDevice
{
    private readonly ICameraCaptureDevice _actualImplementation;
    ...
}