gpt4 book ai didi

c# - 覆盖抽象方法,但保持方法抽象?

转载 作者:行者123 更新时间:2023-11-30 20:54:56 25 4
gpt4 key购买 nike

我想重写一个抽象方法,但将其保持抽象,因此派生类需要自己实现它。

public abstract class ComponentController
{
public abstract void CreateCustomColumns();
}

public abstract class ClientComponentController : ComponentController
{
public override void CreateCustomColumns()
{
// All grids to do with clients should show these columns.
Grid.AddColumn("Client" ...
Grid.AddColumn("ClientLocation" ...
Grid.AddColumn("ClientPhoto" ...
}
}

public class ClientInvoicesComponentController : ClientComponentController
{
public override void CreateCustomColumns()
{
base.CreateCustomColumns();
// On top of the generic columns, I also want to show these.
Grid.AddColumn("InvoiceNumber" ...
Grid.AddColumn("InvoiceDate" ...
}
}

public class ClientCommunicationsComponentController : ClientComponentController
{
public override void CreateCustomColumns()
{
base.CreateCustomColumns();
// On top of the generic columns, I also want to show these.
Grid.AddColumn("CommunicationDate" ...
Grid.AddColumn("CommunicationType" ...
}
}

在此代码中,ClientInvoicesComponentController 不需要实现 CreateCustomColumns(),因为这是不允许的:

public abstract class ClientComponentController : ComponentController
{
public abstract override void CreateCustomColumns()
{
Grid.AddColumn("Client" ...
Grid.AddColumn("ClientLocation" ...
Grid.AddColumn("ClientPhoto" ...
}
}

--> "Abstract method cannot declare a body"

那么,我如何在 ClientComponentController 中覆盖 CreateCustomColumns(),但仍然强制它在 ClientInvoicesComponentController 等派生类中再次被覆盖?

当然,无论如何它仍然可以被覆盖,但是没有任何东西可以向开发人员表明它必须被覆盖......这是我的目标。

-布伦丹

最佳答案

一句话:不是。

方法是抽象的意味着它被声明但没有被定义。被定义但抽象在这种情况下并没有真正的意义,所以这是不可能的。

我也非常想知道您的用例。如果有一些行为你希望子类继承,但也添加自己的功能,你可以这样做:

public abstract class BaseClass
{
public void DoSomething()
{
// Base class behaviour goes here.
DoSomethingInternal();
}

protected abstract void DoSomethingInternal();
}

public class SubClass : BaseClass
{
protected override void DoSomethingInternal()
{
// Sub class behaviour goes here.
}
}

关于c# - 覆盖抽象方法,但保持方法抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690293/

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