gpt4 book ai didi

c#-8.0 - 这是公共(public)但抽象的接口(interface)方法的预期行为吗?

转载 作者:行者123 更新时间:2023-12-01 13:13:27 25 4
gpt4 key购买 nike

我最近发现(由于针对核心 2.2 的损坏构建)现在这在 C# 8 中是合法的

public interface ISimple
{
public string Simon { get; }
}

ISimple是一个接口(interface),Simon没有实现,但是public关键字是允许的。
我知道 public 用于 Default Implementations in Interfaces但是这个属性没有实现。

与此相比,这绝对是意料之中的事

public interface ISimple
{
public string Simon => "met a pie man";
}

我怀疑这是一个疏忽;如果不是,那么这样做的理由是什么?有什么用?

最佳答案

更深更深的含义是,DIM 背后的真正动机是 Xamarin/Android 互操作。

Android 和 Java 使用 DIM 进行接口(interface)版本控制。 Android 应用程序必须在数十个 Android SDK 级别上运行,DIM 用于为为旧版 SDK 构建的应用程序提供默认实现。如果 Xamarin 应用程序可以直接使用或覆盖这些实现,它将会真正受益。

例如 LifeCycleObserver接口(interface)用于通知应用程序特定的生命周期事件。应用程序可以实现这一点以获得事件通知。 DefaultLifeCycleObserver接口(interface)使用 默认方法来提供默认实现,因此应用程序不必处理所有 状态。可以添加新状态并且应用程序根本不需要更改:

/**
* Callback interface for listening to {@link LifecycleOwner} state changes.
* <p>
* If you use Java 8 language, <b>always</b> prefer it over annotations.
*/
@SuppressWarnings("unused")
public interface DefaultLifecycleObserver extends FullLifecycleObserver {
/**
* Notifies that {@code ON_CREATE} event occurred.
* <p>
* This method will be called after the {@link LifecycleOwner}'s {@code onCreate}
* method returns.
*
* @param owner the component, whose state was changed
*/
@Override
default void onCreate(@NonNull LifecycleOwner owner) {
}

Android-DisposeBag覆盖此默认实现以在应用程序暂停或关闭时处理 ReactiveJava 流:

class DisposeBag @JvmOverloads constructor(owner: LifecycleOwner,
private val event: Lifecycle.Event = DisposeBagPlugins.defaultLifecycleDisposeEvent)
: Disposable, DisposableContainer, DefaultLifecycleObserver {

...

override fun onPause(owner: LifecycleOwner) {
if (event == Lifecycle.Event.ON_PAUSE) dispose()
}

override fun onStop(owner: LifecycleOwner) {
if (event == Lifecycle.Event.ON_STOP) dispose()
}

override fun onDestroy(owner: LifecycleOwner) {
if (event == Lifecycle.Event.ON_DESTROY) dispose()
}

如果 Azure SDK 开始使用 DIM,我不会感到惊讶。这可以解释为什么 Scott Hunter 在 .NET Conf 主题演讲中描述 DIM 时一直谈论现代云环境

关于c#-8.0 - 这是公共(public)但抽象的接口(interface)方法的预期行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58304832/

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