当Generic和Non-Generic方法具有相同的名称和参数时,Code Contracts 1.4.40602.0中的错误是什么?

时间:2011-12-09 21:41:17

标签: c# visual-studio code-contracts

通用方法的合同正在丢失,并且不会出现在IL中。下面是一个代码示例。如果您刚刚从界面中删除了非泛型,那么通用合同将按预期工作。但是,在非通用的情况下,通用合同在重写时就会丢失。

[ContractClass(typeof(IContractTestContract))]
interface IContractTest
{
    string TestMethod(string arg);
    T TestMethod<T>(string arg);
}    
[ContractClassFor(typeof(IContractTest))]
abstract class IContractTestContract : IContractTest
{
    public string TestMethod(string arg)
    {
        Contract.Requires(!String.IsNullOrEmpty(arg));
        throw new NotImplementedException();
    }
    public T TestMethod<T>(string arg)
    {
        Contract.Requires(!String.IsNullOrEmpty(arg));
        throw new NotImplementedException();
    }
}
class ContractTest : IContractTest
{
    public string TestMethod(string arg) { return null; }
    public T TestMethod<T>(string arg) { return default(T); }
}
class Program
{
    static void Main(string[] args)
    {
        var c = new ContractTest();
        //Does not fail static or runtime checks
        //Contract is getting lost
        c.TestMethod<string>(null);
    }
}

代码合约设置 Settings

1 个答案:

答案 0 :(得分:1)

Microsoft已将此确认为代码合同中的错误,并且已在内部修复。它将在即将到来的公共版本中发布。

Microsoft Ticket