gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:26:31 25 4
gpt4 key购买 nike

在 C# 8.0 中,接口(interface)可以为某些成员提供默认实现。这些实现是显式的,意味着它们无法通过类实例访问,我们必须强制转换为接口(interface)类型才能调用它们。有没有办法在具有相同名称的类实例上公开此实现?可以通过将 this 指针转换为接口(interface)类型并调用如下方法,以另一个名称公开它:

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

但是我似乎无法找到一种方法来公开具有 B 的原始名称的实现,因为如果我声明一个方法 B,它会被视为实现导致无限递归的接口(interface)的方法。有没有什么方法可以在不复制的情况下公开实现,或者我遗漏了什么?

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

扩展方法是一种解决方案,但默认接口(interface)实现可以访问 protected 成员并且可以重载。

最佳答案

一种可能性是为它们提供属性。当我需要从类中引用显式实现时,这就是我所做的。

class Something : IInterfaceA, IInterfaceB {
public IInterfaceA A => this;
public IInterfaceB B => this;
}

...

something.A.AMethod();
something.B.BMethod();

您还可以考虑使用扩展方法而不是默认实现。无论如何,它们有些相似。

interface IInterface {
}

static class IInterfaceExtensions {
public static void DoSomething(
this IInterface me
) {
// do something
}
}

关于c# - 在 C# 8.0 中,有没有办法公开类的默认成员实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59159133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com