web-dev-qa-db-fra.com

Comment masquer les méthodes publiques d'Intellisense

Je souhaite masquer les méthodes publiques de la liste des membres d'intellisense. J'ai créé un attribut qui, lorsqu'il est appliqué à une méthode, provoquera l'appel de la méthode lors de la construction de son objet. J'ai fait cela pour mieux prendre en charge les classes partielles. Le problème est que dans certains environnements (comme Silverlight), la réflexion ne peut pas accéder aux membres privés, même ceux des classes enfants. C'est un problème car tout le travail est effectué dans une classe de base. Je dois rendre ces méthodes publiques, mais je veux qu'elles soient cachées à intellisense, de la même manière que l'attribut Obsolete fonctionne. Franchement, parce que je suis anal à propos de l'encapsulation d'objets. J'ai essayé différentes choses, mais rien n'a vraiment fonctionné. La méthode apparaît toujours dans la liste déroulante des membres.

Comment puis-je empêcher les méthodes publiques d'apparaître dans intellisense lorsque je ne veux pas qu'elles soient appelées par les clients? Comment ça se passe pour un réel question, Philistins! Cela peut également s'appliquer aux propriétés MEF qui doivent être publiques, bien que vous souhaitiez parfois les cacher aux clients.

pdate: J'ai mûri en tant que développeur depuis que j'ai posté cette question. Pourquoi je me souciais tant de cacher l'interface me dépasse.

49
Jordan

Pour développer mon commentaire sur les méthodes partielles. Essayez quelque chose comme ça

Foo.part1.cs

partial class Foo
{
    public Foo()
    {
        Initialize();
    }

    partial void Initialize();
}

Foo.part2.cs

partial class Foo
{
    partial void Initialize()
    {
         InitializePart1();
         InitializePart2();
         InitializePart3();
    }

    private void InitializePart1()
    {
        //logic goes here
    }

    private void InitializePart2()
    {
        //logic goes here
    }

    private void InitializePart3()
    {
        //logic goes here
    }
}
0
cadrell0

L'utilisation de l'attribut EditorBrowsable comme tel entraînera la non-affichage d'une méthode dans intellisense:

[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public void MyMethod()
{
}
110
Adi Lester

Vous recherchez EditorBrowsableAttribute

L'exemple suivant montre comment masquer une propriété d'une classe d'IntelliSense en définissant la valeur appropriée pour l'attribut EditorBrowsableAttribute. Construisez Class1 dans son propre assembly.

Dans Visual Studio, créez une nouvelle solution d'application Windows et ajoutez une référence à l'assembly qui contient Class1. Dans le constructeur Form1, déclarez une instance de Class1, tapez le nom de l'instance et appuyez sur la touche point pour activer la liste déroulante IntelliSense des membres Class1. La propriété Age n'apparaît pas dans la liste déroulante.

using System;
using System.ComponentModel;

namespace EditorBrowsableDemo
{
    public class Class1
    {
        public Class1()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        int ageval;

        [EditorBrowsable(EditorBrowsableState.Never)]
        public int Age
        {
            get { return ageval; }
            set
            {
                if (!ageval.Equals(value))
                {
                    ageval = value;
                }
            }
        }
    }
}
15
SimSimY