gpt4 book ai didi

c# - 类似于带有定义 c# 的抽象的东西

转载 作者:行者123 更新时间:2023-11-30 19:09:38 24 4
gpt4 key购买 nike

也许这首先是糟糕的设计,但我有一个抽象基类,它有一个方法 validate

public abstract class abClass{
string str1;
string str2;

public virtual bool validate(){...};
}

我知道每个派生类都有需要验证的属性,但我不想复制粘贴 str1str2 的验证每个抽象方法。

我想确保 future 的开发人员(包括我自己)会记得包含并填写验证方法。据我所知,没有办法给抽象方法一个定义,或者强制重写一个虚方法。

到目前为止,我所听到的关于此的所有内容都是“您应该让开发人员选择他/她想做什么”。这对我来说不够好,它违背了检查和平衡以帮助您不犯错误。我不介意他们是否主动选择没有任何实现代码,但如果他们忘记了,那么当派生字段未被验证时,这将在以后引起麻烦。

对这个问题有什么建议吗?

最佳答案

您可以使用 Template method图案:

public bool Validate()
{
// Call base class validation
if (!ValidateCore())
return false;

// Call specific validation code (overridden by derived classes)
return ValidateOverride();
}

private bool ValidateCore()
{
// Validate str1 and str2
// ...
}

protected abstract bool ValidateOverride();

这样,派生类必须覆盖 ValidateOverride(因为它是抽象的),并且它们不能忘记调用 ValidateCore,因为它是由非虚拟对象调用的基类中的方法。

关于c# - 类似于带有定义 c# 的抽象的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24518882/

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