- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一开始我被一个看似非常简单的任务困住了。我有一个类层次结构,每个类都可以在其中定义自己的验证规则。定义验证规则应该尽可能简单。这几乎是所需要的:
class HierarchyBase
{
private List<Func<object, bool>> rules = new List<Func<object, bool>>();
public int fieldA = 0;
public HierarchyBase()
{
AddRule(x => ((HierarchyBase)x).fieldA % 2 == 0);
}
protected virtual void Operation()
{
fieldA++;
}
protected void AddRule(Func<object, bool> validCriterion)
{
rules.Add(validCriterion);
}
public void PerformOperation()
{
Operation();
Validate();
}
protected virtual void Operation()
{
fieldA++;
}
private void Validate()
{
IsValid = rules.All(x => x(this));
}
public bool IsValid
{
get;
private set;
}
}
还需要一件事——添加验证规则时的类型安全。否则每个子类将不得不做那些看起来很尴尬的类型转换。理想Func<T, bool>
会工作,但有一大堆问题:我们不能继承我们的 HierarchyBase
来自任何类型的 IValidatable<HierarchyBase>
因为继承层次结构可以有 N 层深(是的,我也闻到了这种味道);储存任何混凝土 Func<HierarchyBaseInheritor, bool>
在 rules
并遍历它们。
您将如何在这里引入类型安全?
最佳答案
正确的方法是让层次结构中的每个类负责验证自身:
HierarchyBase:
class HierarchyBase
{
public int A { get; set; }
public bool Validate()
{
return this.OnValidate();
}
protected virtual bool OnValidate()
{
return (this.A % 2 == 0);
}
}
HierarchyBaseInheritorA:
class HierarchyBaseInheritorA : HierarchyBase
{
public int B { get; set; }
protected override bool OnValidate()
{
return base.OnValidate() &&
(this.A > 10) &&
(this.B != 0);
}
}
HierarchyBaseInheritorB:
class HierarchyBaseInheritorB : HierarchyBaseInheritorA
{
public int C { get; set; }
protected override bool OnValidate()
{
return base.OnValidate() &&
(this.A < 20) &&
(this.B > 0) &&
(this.C == 0);
}
}
用法:
var result = new HierarchyBaseInheritorB();
result.A = 12;
result.B = 42;
result.C = 0;
bool valid = result.Validate(); // == true
关于c# - 如何以通用类型安全的方式验证层次结构中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3790462/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!