Pregunta

posible duplicado:
C # 4: Métodos sobrecargados en conflicto con parámetros opcionales

Solo tengo una pequeña investigación y crea el siguiente código.

namespace Test {
class Program
{
    public interface ITestA
    {
        void MethodA(int a, int b);
    }

    public class TestAClass : ITestA
    {
        public void MethodA(int a, int b)
        {
            Console.WriteLine("MethodA with param");
        }

        public void MethodA(int a, int b, bool logic = true)
        {
            Console.WriteLine("MethodA logic with param");
        }
    }

    public interface ITestB
    {
        void MethodA(int a, int b, bool logic = true);
    }

    public class TestBClass : ITestB
    {
        public void MethodA(int a, int b)
        {
            Console.WriteLine("MethodB with param");
        }         

        public void MethodA(int a, int b, bool logic = true)
        {
            Console.WriteLine("MethodB logic with param");
        }
    }

    static void Main(string[] args)
    {
        var testA = new TestAClass();
        testA.MethodA(1, 1);            
        var testB = new TestBClass();
        testB.MethodA(1, 1);   
    }
} }

Tengo una pregunta por qué el compilador siempre elige método corto con 2 parámetros.Y, por supuesto, todo esto funciona de la misma manera y sin interfaz.

gracias

¿Fue útil?

Solución

Esto se reduce a la forma en que el compilador trata nombrado y parámetros opcionales .
Echa un vistazo a Este artículo en MSDN Para obtener más información, especialmente el párrafo Resolución de sobrecarga .

Si se considera que dos candidatos son igualmente buenos, la preferencia va a un candidato que no tiene parámetros opcionales para qué argumentos se omitieron en la llamada.Esto es una consecuencia de una preferencia general en la resolución de sobrecarga para los candidatos que tienen menos parámetros.

Esta es la razón por la que en su caso, el compilador elige el método sin ningún parámetro opcional.

Otros consejos

Debido a que el compilador encuentra un método que corresponde perfectamente al método de llamada y usarlo.
El compilador busca otros métodos adecuados si la primera manera falla ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top