dotnet/roslyn
Voir sur GitHubCS compiler accepts contradicting signature and fails to accept exact signature when overriding a generic abstract method
Open
#76 914 ouverte le 24 janv. 2025
Area-CompilersConcept-Diagnostic ClarityFeature - Nullable Reference Typeshelp wanted
Métriques du dépôt
- Stars
- (20 414 stars)
- Métriques de merge PR
- (Merge moyen 6j 17h) (256 PRs mergées en 30 j)
Description
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.