Tag: 委托

在C#中,是否有可能为类型公开其成员类型的接口作为自己的接口

我不确定如何清楚地说出这个问题,所以下面是同一个问题的另外两个版本: 一个结构/类可以通过委托给它的字段/属性来实现一个接口吗? 我可以将由字段/属性类型实现的接口映射到其结构/类吗? 这里是一个代码示例添加伪语法,希望显示我的意思是: public class School : IEnumerable<Student> { private List<Student> students expose IEnumerable<Student>; … } 如果这不是现在可能的话,这有可能吗? …或者这种方法存在一些严重的问题吗? 我认为这可能只是语法糖来摆脱锅炉板代码,否则将功能相同。 例: public class School : IEnumerable<Student> { private List<Student> students; … public IEnumerator<Student> GetEnumerator() { return students.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } } 这当然是一个非常人为和最小的例子。 当为它设计界面时,好处会更大,特别是当有很多方法“映射”的时候。 更新:我知道我提供了一个可怕的例子,但我只是想用最简单的例子。 问题的核心不在于具体的情况。 说了这么多,我的例子很糟糕。 所以,为了更好地帮助那些喜欢看到好榜样的人陪伴一个问题,这里有一个更好的例子: public interface IValidPeriod […]

从Delegate属性的getValue()和setValue()函数外部获取KProperty信息

我试图用委托Kotlin属性实现JavaFX Property接口,以便它可以像这样使用: class Foo(bar:Bar){ val barProperty=PropertyFX(bar) var bar by barProperty } 我为此写了一个小类(大部分): class PropertyFX<T>(value:T):SimpleObjectProperty<T>(value),ReadWriteProperty<Any?,T>{ override fun getValue(thisRef:Any?,property:KProperty<*>)=get() override fun setValue(thisRef:Any?,property:KProperty<*>,value:T)=set(value) } 但是,这个类没有实现接口的getBean()和getName()方法。 它们应该分别从getValue()和setValue()函数中引用的参数中返回值thisRef和property.name,但是我不能从函数外部访问这些参数。 我可以在第一次使用时存储这些值,如下所示: class PropertyFX<T>(value:T):SimpleObjectProperty<T>(value),ReadWriteProperty<Any?,T>{ private var bean:Any?=null private var name="" override fun getBean()=bean override fun getName()=name override fun getValue(thisRef:Any?,property:KProperty<*>):T{ bean=thisRef name=property.name return get() } override fun setValue(thisRef:Any?,property:KProperty<*>,value:T){ bean=thisRef name=property.name set(value) } 但是,这似乎是一个可怕的黑客攻击,它不返回正确的值getBean()和getName(),直到该属性被访问一次。 有没有办法获得这些值,而不需要传递给构造函数,就像SimpleObjectProperty所要求的那样 […]

什么编程语言支持由代理实现隐式接口?

Kotlin可以做到这一点非常巧妙的把戏: class Derived(b: Base) : Base by b 这使您的类Derived实现Base ,并且在Derived中未明确实现Base所有方法都会自动委派给成员b 。 我不在Kotlin编程,失去'this'指针可能是相当有限的,但它看起来像一个简单的东西,可能意味着每一种语言都应该具有的可维护性。