Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não entendi bem o motivo que o código não compila. Foi explicado que o This so pode aparecer no primeiro argumento. Primeiramente qual a função do this em um argumento? segundo, porque o this so pode aparecer no primeiro? GRato

class Conta { public string Titular { get; set; } // outros métodos e atributos da conta }

static class ContaExtensions { public static void MudaTitular(this Conta conta, this string titular) { conta.Titular = titular; } }

2 respostas
solução!

Boa tarde Julio Cesar,

segundo esse link: https://www.dotnetperls.com/extension

O método é static e recebe o this para indicar o tipo de dado que vai implicar. Ou seja, o tipo de dado que vc vai passar pra ele o valor que ele irá utilizar. por exemplo:

using System;

public static class ExtensionMethods
{
    public static string UppercaseFirstLetter(this string value)
    {
        // Uppercase the first letter in the string.
        if (value.Length > 0)
        {
            char[] array = value.ToCharArray();
            array[0] = char.ToUpper(array[0]);
            return new string(array);
        }
        return value;
    }
}

class Program
{
    static void Main()
    {
        // Use the string extension method on this value.
        string value = "dot net perls";
        value = value.UppercaseFirstLetter();
        Console.WriteLine(value);
    }
}

Saída: Dot net perls

os parâmetros posteriores são opcionais e não utilizam o this, pois o this serve para indicar somente qual é o tipo de dado que vai ser utilizado.. porém, você pode passar demais parâmetros à extensions como por exemplo:

using System;

static class Extensions
{
    public static int MultiplyBy(this int value, int mulitiplier)
    {
        // Uses a second parameter after the instance parameter.
        return value * mulitiplier;
    }
}

class Program
{
    static void Main()
    {
        // Ten times 2 is 20.
        // Twenty times 2 is 40.
        int result = 10.MultiplyBy(2).MultiplyBy(2);
        Console.WriteLine(result);
    }
}

Saída: 40

no seu caso, o código não compila pois vc passou a segunda variável com o this , para solucionar basta retirar o this.

static class ContaExtensions 
{ 
    public static void MudaTitular(this Conta conta, string titular)
    {
        conta.Titular = titular; 
    }
 }

Maravilha. Bem esclarecedor. Obrigado pela ajuda