gpt4 book ai didi

C# 接口(interface)和基类

转载 作者:太空狗 更新时间:2023-10-29 18:03:08 25 4
gpt4 key购买 nike

我有一个 C# 接口(interface)和一个实现该接口(interface)的具体类。我现在想创建另一个实现该接口(interface)的类。很简单。

但是,类中的大多数方法将完全相同,实际上只有几个方法会发生变化。

我不想复制第一个类中包含的第二个类中的所有逻辑。

我如何创建第二个类,并在我的第一个类中使用除了额外内容之外的逻辑?

我的接口(interface)叫做 IEventRepository,我的第一个类叫做 BaseEvents。我现在想创建一个名为 FooBarEvents 的新类。

我对 FooBarEvents 的类定义是:

public class FooBarEvents : BaseEvents, IEventRepository

我的意图是在每个重复代码的方法中使用 return base.Method()。

我假设这不正确?

最佳答案

FooBarEvents 应该只需要继承自 BaseEvents,不需要同时实现 IEventRepository,因为 BaseEvents 已经实现了界面。如果您需要更改 FooBarEvents 中某些 IEventRepository 方法的行为,只需覆盖这些方法即可。

编辑:一些例子

interface IEventRepository
{
void CommonMethodA();
void CommonMethodB();
void ImplentationSpecificMethod();
}

abstract class BaseEvents : IEventRepository
{
public void CommonMethodA()
{ ... }

public virtual void CommonMethodB()
{ ... }

public abstract void ImplementationSpecificMethod();

public void BaseEventsMethod()
{ ... }

public void BaseEventsMethod2()
{ ... }
}

class FooBarEvents : BaseEvents
{
public override void CommonMethodB()
{
// now FooBarEvents has a different implementation of this method than BaseEvents
}

public override void ImplementationSpecificMethod()
{
// this must be implemented
}

public new void BaseEventsMethod2()
{
// this hides the implementation that BaseEvents uses
}

public void FooBarEventsMethod()
{
// no overriding necessary
}
}

// all valid calls, assuming myFooBarEvents is instantiated correctly
myFooBarEvents.CommonMethodA()
myFooBarEvents.CommonMethodB()
myFooBarEvents.BaseEventsMethod();
myFooBarEvents.BaseEventsMethod2();
myFooBarEvents.FooBarEventsMethod();
myFooBarEvents.ImplementationSpecificMethod();

// use the contract thusly:
void DoSomethingWithAnEventRepository(BaseEvents events)
{ ... }

关于C# 接口(interface)和基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913095/

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