When a reference parameter (keyword ``++ref++``) is used, the passed argument type must exactly match the reference parameter type. This means that to be able to pass a derived type, it must be cast and assigned to a variable of the proper type. Use of generic methods eliminates that cumbersome down casting and should therefore be preferred. This rule raises an issue when a method contains a ``++ref++`` parameter of type ``++System.Object++``. == Noncompliant Code Example ---- using System; namespace MyLibrary { public class Foo { public void Bar(ref object o1, ref object o2) // Noncompliant { } } } ---- == Compliant Solution ---- using System; namespace MyLibrary { public class Foo { public void Bar(ref T ref1, ref T ref2) { } } } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) include::message.adoc[] include::highlighting.adoc[] endif::env-github,rspecator-view[]