6
votes

Comment créez-vous une extension en C #?

J'ai écrit cette extension pour StringBuilder dans vb.net:NETHIXXXp> J'ai essayé de le porter à C # (j'apprends lentement / enseigner moi-même C #), mais j'ai échoué jusqu'à présent: P>

using System.Runtime.CompilerServices;

namespace myExtensions
{
    public static class sbExtension
    {
        [Extension()]
        public static void AppendFormattedLine(this System.Text.StringBuilder oStr, string format, string arg0)
        {
            oStr.AppendFormat("{0}{1}", string.Format(format, arg0), Environment.NewLine);
        }
        [Extension()]
        public static void AppendFormattedLine(this System.Text.StringBuilder oStr, string format, string arg0, string arg1)
        {
            oStr.AppendFormat("{0}{1}", string.Format(format, arg0, arg1), Environment.NewLine);
        }
        [Extension()]
        public static void AppendFormattedLine(this System.Text.StringBuilder oStr, string format, string arg0, string arg1, string arg2)
        {
            oStr.AppendFormat("{0}{1}", string.Format(format, arg0, arg1, arg2), Environment.NewLine);
        }
        [Extension()]
        public static void AppendFormattedLine(this System.Text.StringBuilder oStr, string format, string[] args)
        {
            oStr.AppendFormat("{0}{1}", string.Format(format, args), Environment.NewLine);
        }
    }
}


1 commentaires

Non liée à votre question de vulgarisation, mais je vois dans la version VB utilisée par PARAMARRAY dans la dernière méthode. La syntaxe équivalente en C # est la chaîne de paramètres [] arguments.


5 Réponses :


16
votes

C # 'S "Ce" mot-clé, que vous utilisez correctement, est un remplacement de l'attribut [extension ()]. Supprimer ceux-ci et vous devriez être prêt à partir.

clarifier, par "remplacement", je veux vraiment dire "sucre syntaxique" - lorsque le compilateur voit le "Ceci" modificateur, il génère la même extensionTtribue que vous devez ajouter à la main dans VB.


0 commentaires

10
votes

Retirez simplement l'attribut d'extension tout autant - C # nécessite uniquement le qualificatif sur le premier paramètre pour créer une méthode d'extension.


0 commentaires

-1
votes

Vous voudrez modifier l'espace de noms vers le système, ainsi que de supprimer l'attribut d'extension, car d'autres ont dit.


1 commentaires

Pourquoi voudraient-ils changer l'espace de noms vers le système?



12
votes

Personne ne montre réellement un exemple de syntaxe.

public static void ApplyNewServer(this ReportDocument report, string serverName, string username, string password)
{
}


0 commentaires

0
votes

L'attribut que vous utilisez est pour la méthode d'extension, qui en C #, vous ne l'écrivez pas manuellement et le compilateur le faire pour vous, ... Vous pouvez apprendre ici, comment écrire une méthode d'extension dans .NET en utilisant à la fois VB & C #

http://www.codeproject.com/articles/261639/ Extension-Méthodes-in-Net

http: //www.codeproject. com / articles / 34295 / étendue-the-net-bibliothèque-with-extension-méthode


0 commentaires