dotnet/roslyn
Vedi su GitHubCS compiler accepts contradicting signature and fails to accept exact signature when overriding a generic abstract method
Open
#76.914 aperta il 24 gen 2025
Area-CompilersConcept-Diagnostic ClarityFeature - Nullable Reference Typeshelp wanted
Metriche repository
- Star
- (20.414 star)
- Metriche merge PR
- (Merge medio 6g 17h) (256 PR mergiate in 30 g)
Descrizione
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.