﻿<?xml version="1.0" encoding="utf-8"?><Type Name="AvoidRefAndOutParametersRule" FullName="Gendarme.Rules.Design.AvoidRefAndOutParametersRule"><TypeSignature Language="C#" Value="public class AvoidRefAndOutParametersRule : Gendarme.Framework.Rule, Gendarme.Framework.IMethodRule" /><TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit AvoidRefAndOutParametersRule extends Gendarme.Framework.Rule implements class Gendarme.Framework.IMethodRule, class Gendarme.Framework.IRule" /><AssemblyInfo><AssemblyName>Gendarme.Rules.Design</AssemblyName><AssemblyVersion>3.10.0.0</AssemblyVersion></AssemblyInfo><Base><BaseTypeName>Gendarme.Framework.Rule</BaseTypeName></Base><Interfaces><Interface><InterfaceName>Gendarme.Framework.IMethodRule</InterfaceName></Interface></Interfaces><Attributes><Attribute><AttributeName>Gendarme.Framework.FxCopCompatibility("Microsoft.Design", "CA1021:AvoidOutParameters")</AttributeName></Attribute><Attribute><AttributeName>Gendarme.Framework.FxCopCompatibility("Microsoft.Design", "CA1045:DoNotPassTypesByReference")</AttributeName></Attribute><Attribute><AttributeName>Gendarme.Framework.Problem("This method use ref and/or out parameters in a visible API which can confuse many developers.")</AttributeName></Attribute><Attribute><AttributeName>Gendarme.Framework.Solution("The most common reason to do this is to return multiple values from a method which can be rewritten so that it returns a custom type instead.")</AttributeName></Attribute></Attributes><Docs><summary>
            This rule fires if a method uses <c>ref</c> or <c>out</c> parameters.
            These are advanced features that can easily be misunderstood and misused
            (by the consumer). This can result in an API that is difficult to use so
            avoid them whenever possible.
            An alternative is to use one of the new generic <c>Tuple</c> types (FX v4 and later)
            as the return value.
            No defect will be reported if the method:
            <list><item>follows the <c>bool Try*(X out)</c> pattern; or</item><item>implement an interface requiring the use of <c>ref</c> or <c>out</c> parameters.
            In the later case defects will be reported against the interface itself (if analyzed
            by Gendarme).</item></list></summary><remarks>This rule is available since Gendarme 2.0</remarks><example>
            Bad example:
            <code>
            public bool NextJob (ref int id, out string display)
            {
            	if (id &lt; 0)
            		return false;
            	display = String.Format ("Job #{0}", id++);
            	return true;
            }
            </code></example><example>
            Good example:
            <code>
            private int id = 0;
            private int GetNextId ()
            {
            	int id = this.id++;
            	return id;
            }
            public string NextJob ()
            {
            	return String.Format ("Job #{0}", Id);
            }
            </code></example></Docs><Members><Member MemberName=".ctor"><MemberSignature Language="C#" Value="public AvoidRefAndOutParametersRule ();" /><MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" /><MemberType>Constructor</MemberType><AssemblyInfo><AssemblyVersion>3.10.0.0</AssemblyVersion></AssemblyInfo><Parameters /><Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs></Member><Member MemberName="CheckMethod"><MemberSignature Language="C#" Value="public Gendarme.Framework.RuleResult CheckMethod (Mono.Cecil.MethodDefinition method);" /><MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance valuetype Gendarme.Framework.RuleResult CheckMethod(class Mono.Cecil.MethodDefinition method) cil managed" /><MemberType>Method</MemberType><AssemblyInfo><AssemblyVersion>3.10.0.0</AssemblyVersion></AssemblyInfo><ReturnValue><ReturnType>Gendarme.Framework.RuleResult</ReturnType></ReturnValue><Parameters><Parameter Name="method" Type="Mono.Cecil.MethodDefinition" /></Parameters><Docs><param name="method">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs></Member></Members></Type>