如何为派生类对象编写验证方法

本文关键字:验证 方法 对象 派生 | 更新日期: 2023-09-27 18:12:46

我正在读取来自不同类型的CSV文件的用户输入,这些文件具有一些常见的和一些不同的属性。我已经创建了一个基类TestCaseData和派生类如下:

public abstract class TestCaseData
{
 public abstract string ID { get; set; }
 public abstract string Name{ get; set; }
}
public class DerivedClassOne :TestCaseData
{
public override string ID { get; set; }
public override string Name{ get; set; }
pubic string DerivedOneProperty{ get; set; }
}
public class DerivedClassTwo :TestCaseData
{
public override string ID { get; set; }
public override string Name{ get; set; }
pubic string DerivedTwoProperty{ get; set; }
}

我正在阅读CSV文件并创建派生类列表并分配给基类列表,如下所示

List<TestCaseData> lstTestCaseData = MethodCallToReturnListOf_DerivedOneClassFromCSV();

因为现在我有lstTestCaseData,我必须验证用户输入,我也无法找到一种方法来编写单个方法来验证类型DerivedOnePropertyDerivedTwoProperty的用户输入,因为它们有自己的属性。有人能帮我吗?

我有类似这样的方法签名

 public string ValidateCompleteFile(List<TestCaseData> TestCaseInputList, out bool IsInputValid)

如何为派生类对象编写验证方法

您可以在TestCaseData类上放置一个抽象的验证方法,然后让每个继承这个类的类按照它们需要的方式实现它。

public abstract class TestCaseData
{
 public abstract string ID { get; set; }
 public abstract string Name{ get; set; }
 public abstract bool Validate();
}

然后为TestCaseInputList集合中的每个条目调用此方法。

关于抽象方法的答案是最好的解决方案,如果您致力于您最初设想的代码模式(即在每个对象上调用验证方法)。但是,也许最好在setter中验证每个字段:

public abstract class TestCaseData
{
    private string id, name;
    public abstract string ID { get; set; }
    public abstract string Name{ get; set; }
}
public class DerivedClassOne : TestCaseData
{
    public override string ID
    {
        get { return id; }
        set
        {
            if ( ... ) throw new ArgumentException();
            ...
            id = value;
        }
    }
    ...
}

这样,一旦遇到无效值就会抛出异常。想象一下,如果您在检查每个对象是否有效之前创建了一百万个这样的对象,却发现第一个对象无效。该解决方案通过在属性设置时进行主动验证来避免这种情况。