在C#8.0中,有没有办法在类中公开默认成员实现?

斯蒂尔加

在C#8.0中,某些成员的接口可以具有默认实现。这些实现是显式的,意味着它们无法通过类实例进行访问,我们必须强制转换为接口类型来调用它们。有没有办法在具有相同名称的类实例上公开此实现?可以通过将this指针强制转换为接口类型并像下面这样调用方法来以其他名称公开它:

void A()
{
   ((ISomething)this).B();
}

但是我似乎找不到一种以原始名称B公开实现的方法,因为如果我声明一个方法B,它就算是实现导致无限递归的接口的方法。有什么办法可以暴露实现而不复制它,或者我缺少什么?

为澄清起见,我正在寻找一种实现类似特征的功能的方法,即能够在不更改方法名称的情况下将实现从接口直接导入到类的公共API中(大概接口中的名称是最好的)。问题不在于如何以该类的用户身份调用该方法,而是如何使其成为该类的公共API的一部分。

扩展方法是一种解决方案,但是默认接口实现可以访问受保护的成员,并且可以重载。

杰罗恩·莫斯特(Jeroen Mostert)

没有简单的方法可以做到。可能有各种丑陋的解决方法,所有这些都归结为委托给某种其他方法(静态方法或依赖于本身未实现该方法的帮助器类)来访问它,即使如此,您仍需要以某种方式传递状态。这里有一个语法建议base(T)规范草案,应该允许base(ISomething).B()在不引起循环引用的情况下引用实现。最初计划将其作为C#8的一部分,但是事实证明它过于雄心勃勃,因此被削减了。在撰写本文时,它是包含在C#9中候选对象

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

c#8中的公共接口成员

来自分类Dev

C#8默认接口实现/特性的事件继承

来自分类Dev

C#8默认实现和依赖倒置

来自分类Dev

C#8从具体类型内调用默认实现

来自分类Dev

.NET Framework 4.7.2中的C#8功能

来自分类Dev

什么是C#8中的未知可空性?

来自分类Dev

开关表达式中的多个语句:C#8

来自分类Dev

在C#8中使用不带变量的语句

来自分类Dev

使成员成为虚拟成员可防止调用默认接口实现,并在C#8中导致StackOverflowException

来自分类Dev

在C++中,有没有办法区分基类指针指向的实例类?

来自分类Dev

有没有办法在 C++ 中实现 Python 的 join()?

来自分类Dev

为什么我没有收到有关在C#8中使用结构的类成员可能会取消引用null的警告?

来自分类Dev

有没有办法将输入类型包装到C ++中的模板类?

来自分类Dev

有没有办法只允许对C ++中的最终类进行继承

来自分类Dev

有没有办法在C ++中后期初始化成员变量(类)?

来自分类Dev

有没有办法在c ++ / cx ref类上实现类似.net的属性?

来自分类Dev

有没有办法在c ++ / cx ref类上实现类似.net的属性?

来自分类Dev

Java8:有没有办法从类方法引用中获取实例方法引用?

来自分类Dev

有关C#8可为空的引用类型的信息是否存储在.NET程序集中?

来自分类Dev

具有C#8可为空的引用类型的TryGetValue模式

来自分类Dev

在接口C#8中使用静态,内部和受保护的访问修饰符

来自分类Dev

如何允许C#8中的可为空的泛型类型作为方法的返回类型?

来自分类Dev

在C#8中,如何检测不可能的空检查?

来自分类Dev

在C#8中的System.Type上切换表达式

来自分类Dev

在C#8 IAsyncEnumerable <T>中并行收益率返回

来自分类Dev

在 C++ 中使用成员函数向量时,有没有办法实现协变返回类型?

来自分类Dev

有没有办法在没有名称空间的C ++中嵌套枚举?

来自分类Dev

有没有办法使用C#在autocad(.dwg)中获取所有折线?

来自分类Dev

有没有办法在 C++ 中并行循环遍历向量的所有元素?

Related 相关文章

  1. 1

    c#8中的公共接口成员

  2. 2

    C#8默认接口实现/特性的事件继承

  3. 3

    C#8默认实现和依赖倒置

  4. 4

    C#8从具体类型内调用默认实现

  5. 5

    .NET Framework 4.7.2中的C#8功能

  6. 6

    什么是C#8中的未知可空性?

  7. 7

    开关表达式中的多个语句:C#8

  8. 8

    在C#8中使用不带变量的语句

  9. 9

    使成员成为虚拟成员可防止调用默认接口实现,并在C#8中导致StackOverflowException

  10. 10

    在C++中,有没有办法区分基类指针指向的实例类?

  11. 11

    有没有办法在 C++ 中实现 Python 的 join()?

  12. 12

    为什么我没有收到有关在C#8中使用结构的类成员可能会取消引用null的警告?

  13. 13

    有没有办法将输入类型包装到C ++中的模板类?

  14. 14

    有没有办法只允许对C ++中的最终类进行继承

  15. 15

    有没有办法在C ++中后期初始化成员变量(类)?

  16. 16

    有没有办法在c ++ / cx ref类上实现类似.net的属性?

  17. 17

    有没有办法在c ++ / cx ref类上实现类似.net的属性?

  18. 18

    Java8:有没有办法从类方法引用中获取实例方法引用?

  19. 19

    有关C#8可为空的引用类型的信息是否存储在.NET程序集中?

  20. 20

    具有C#8可为空的引用类型的TryGetValue模式

  21. 21

    在接口C#8中使用静态,内部和受保护的访问修饰符

  22. 22

    如何允许C#8中的可为空的泛型类型作为方法的返回类型?

  23. 23

    在C#8中,如何检测不可能的空检查?

  24. 24

    在C#8中的System.Type上切换表达式

  25. 25

    在C#8 IAsyncEnumerable <T>中并行收益率返回

  26. 26

    在 C++ 中使用成员函数向量时,有没有办法实现协变返回类型?

  27. 27

    有没有办法在没有名称空间的C ++中嵌套枚举?

  28. 28

    有没有办法使用C#在autocad(.dwg)中获取所有折线?

  29. 29

    有没有办法在 C++ 中并行循环遍历向量的所有元素?

热门标签

归档