How to hide public methods from intellisense

放肆的年华 提交于 2019-11-26 10:57:34

问题


I want to hide public methods from the intellisense member list. I have created an attribute that when applied to a method will cause the method to be called when its object is constructed. I\'ve done this to better support partial classes. The problem is that in some environments (such as Silverlight), reflection cannot access private members even those of child classes. This is a problem since all of the work is done in a base class. I have to make these methods public, but I want them to be hidden from intellisense, similar to how the Obsolete attribute works. Frankly, because I am anal about object encapsulation. I\'ve tried different things, but nothing has actually worked. The method still show up in the member drop-down.

How do I keep public methods from showing up in intellisense when I don\'t want them to be called by clients? How\'s that for a real question, Philistines! This can also apply to MEF properties that have to be public though sometimes you want to hide them from clients.

Update: I have matured as a developer since I posted this question. Why I cared so much about hiding interface is beyond me.


回答1:


To expand on my comment about partial methods. Try something like this

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
    }
}



回答2:


Using the EditorBrowsable attribute like so will cause a method not to be shown in intellisense:

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



回答3:


You are looking for EditorBrowsableAttribute

The following sample demonstrates how to hide a property of a class from IntelliSense by setting the appropriate value for the EditorBrowsableAttribute attribute. Build Class1 in its own assembly.

In Visual Studio, create a new Windows Application solution, and add a reference to the assembly which contains Class1. In the Form1 constructor, declare an instance of Class1, type the name of the instance, and press the period key to activate the IntelliSense drop-down list of Class1 members. The Age property does not appear in the drop-down list.

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;
                }
            }
        }
    }
}


来源:https://stackoverflow.com/questions/9086136/how-to-hide-public-methods-from-intellisense

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!