CA1061: Basisklassemethoden niet verbergen
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1061 |
Titel | Basisklassemethoden niet verbergen |
Categorie | Ontwerpen |
Oplossing is brekend of niet-brekend | Breken |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Een afgeleid type declareert een methode met dezelfde naam en met hetzelfde aantal parameters als een van de basismethoden; een of meer van de parameters is een basistype van de bijbehorende parameter in de basismethode; en alle overige parameters hebben typen die identiek zijn aan de bijbehorende parameters in de basismethode.
Beschrijving van regel
Een methode in een basistype wordt verborgen door een identiek benoemde methode in een afgeleid type wanneer de parameterhandtekening van de afgeleide methode alleen verschilt van typen die zwakker zijn afgeleid dan de bijbehorende typen in de parameterhandtekening van de basismethode.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, verwijdert of wijzigt u de methode of wijzigt u de parameterhandtekening, zodat de methode de basismethode niet verbergt.
Wanneer waarschuwingen onderdrukken
Een waarschuwing van deze regel niet onderdrukken.
Opmerking
In het volgende voorbeeld ziet u een methode die de regel schendt.
class BaseType
{
internal void MethodOne(string inputOne, object inputTwo)
{
Console.WriteLine("Base: {0}, {1}", inputOne, inputTwo);
}
internal void MethodTwo(string inputOne, string inputTwo)
{
Console.WriteLine("Base: {0}, {1}", inputOne, inputTwo);
}
}
class DerivedType : BaseType
{
internal void MethodOne(string inputOne, string inputTwo)
{
Console.WriteLine("Derived: {0}, {1}", inputOne, inputTwo);
}
// This method violates the rule.
internal void MethodTwo(string inputOne, object inputTwo)
{
Console.WriteLine("Derived: {0}, {1}", inputOne, inputTwo);
}
}
class Test
{
static void Main1061()
{
DerivedType derived = new DerivedType();
// Calls DerivedType.MethodOne.
derived.MethodOne("string1", "string2");
// Calls BaseType.MethodOne.
derived.MethodOne("string1", (object)"string2");
// Both of these call DerivedType.MethodTwo.
derived.MethodTwo("string1", "string2");
derived.MethodTwo("string1", (object)"string2");
}
}