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

本文关键字:变量 成员 调用 方法 是否 | 更新日期: 2023-09-27 18:30:28

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

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

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

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

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

(1)

class CustomCaptureDevice
{
    private PhotoCaptureDevice captureDevice;
    // Implement all the functions of PhotoCaptureDevice here. And internally redirect them to PhotoCaptureDevice
}

上述方法太麻烦了。如果对 PhotoCaptureDevice 进行任何 API 更改,可能需要对 CustomCaptureDevice 类进行重大更新。

(二)

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密封类的约束。

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

第一种方法通常称为装饰器模式(即包装器)。我相信这正是您所需要的,因为它允许您在引擎盖下为给定的界面提供任何功能。

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

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