dotnet/roslyn
在 GitHub 查看CS compiler accepts contradicting signature and fails to accept exact signature when overriding a generic abstract method
Open
#76,914 建立於 2025年1月24日
Area-CompilersConcept-Diagnostic ClarityFeature - Nullable Reference Typeshelp wanted
倉庫指標
- Star
- (20,414 star)
- PR 合併指標
- (平均合併 6天 17小時) (30 天內合併 256 個 PR)
描述
This compiles:
#nullable enable
using System;
namespace Demo
{
public interface ITest
{
public bool TryGet<T>(out T? result) where T : notnull;
}
public abstract class MyAbstractClass : ITest
{
public abstract bool TryGet<T>(out T? result) where T : notnull;
}
public class MyDerivedClass : MyAbstractClass
{
public override bool TryGet<T>(out T result)
{
throw new Exception("");
}
}
}
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
This fails:
#nullable enable
using System;
namespace Demo
{
public interface ITest
{
public bool TryGet<T>(out T? result) where T : notnull;
}
public abstract class MyAbstractClass : ITest
{
public abstract bool TryGet<T>(out T? result) where T : notnull;
}
public class MyDerivedClass : MyAbstractClass
{
public override bool TryGet<T>(out T? result)
{
throw new Exception("");
}
}
}
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
public override bool TryGet<T>(out T result) signature, the one the compiler is happy to accept, contradicts both inherited definitions while it rejects public override bool TryGet<T>(out T? result) which is exactly the same as in parents.