维护.NET框架和项目之间的契约

时间:2014-08-04 13:36:52

标签: .net maintenance

我有一个非通用的包装器,可以容纳一个受支持对象的实例。其中一种受支持的类型是DateTime。在内部,包装器使用选择的原始值存储值,因此不能立即使用类型DateTime的实例,需要简单的表示。可以使用属性DateTime.Ticks返回Int64的实例(出于某种原因,long Int64 DateTime.cs中的DateTime.Ticks被不小心互换。

如果DateTime的返回类型发生了变化,则不会抛出任何异常,该对象将照常使用,这是一场灾难。常识告诉我它不会改变,但我觉得依赖这些想法是不负责任的。现在我已经对负责执行{{1}}演员表的代码发表了评论,我错过了一个更好的选择吗?

1 个答案:

答案 0 :(得分:0)

在将框架类属性的值赋给后备基元类型字段时,可以使用通用帮助器方法。

在框架汇编中:

public class FrameworkClass
{
    public long Ticks;
}

在你的集会中:

class Program
{
    static void Main(string[] args)
    {
        var fc = new FrameworkClass() { Ticks = 2 };
        long backingField;
        Assign(out backingField, fc.Ticks);
        Console.Error.WriteLine(backingField);
    }

    static void Assign<T, U>(out T left, U right) where U : T
    {
        left = right;
    }
}

如果框架程序集发生更改以使Ticks字段不再是long,则代码将无法针对新框架进行编译,并且如果您尝试运行针对“旧”编译的程序集“具有”新“框架的框架,您将获得MissingFieldException - 不会进行任务。