C#中如何访问显式实现接口的KeyboardHeightChanged成员?
解决方法:访问显式实现的接口成员
你现在的问题是显式实现的接口成员在类内部无法直接访问,因为显式实现的成员属于接口类型,而非类本身的公开成员。给你两种可行的解决方式:
方式一:通过转换为接口类型访问
在DetailsViewModel内部,把this强制转换成IKeyboardInteractionService接口类型,就能访问这个成员:
// 在DetailsViewModel的方法/构造函数里 var keyboardHeightSubject = ((IKeyboardInteractionService)this).KeyboardHeightChanged; // 之后就可以订阅或者使用这个Subject了 keyboardHeightSubject.Subscribe(height => { /* 处理高度变化逻辑 */ });
方式二:用私有字段存储,显式实现的属性返回该字段
这种方式更优雅,适合需要频繁在类内部访问的场景:
修改DetailsViewModel的实现,先定义一个私有字段,让显式实现的接口属性返回这个字段:
public partial class DetailsViewModel : IKeyboardInteractionService { // 私有字段,类内部可直接调用 private readonly Subject<float> _keyboardHeightChanged = new Subject<float>(); // 显式实现接口属性,返回私有字段 Subject<float> IKeyboardInteractionService.KeyboardHeightChanged => _keyboardHeightChanged; // 类内部示例用法 public void TriggerKeyboardHeightChange(float newHeight) { _keyboardHeightChanged.OnNext(newHeight); } }
这样既满足了接口的实现要求,又能在类内部直接操作这个Subject。
内容的提问来源于stack exchange,提问作者siflJebatkundy
相关产品推荐
相关产品推荐

