如何从Base Class隐藏基本方法?

时间:2011-12-10 13:06:34

标签: c# .net oop design-patterns

我开发了一些代码来测试。我知道:如果我使用内部方法,我们可以在另一个命名空间中隐藏我的方法,例如:

public vs. internal methods on an internal class

如何隐藏主程序中的Add方法;如果我ress dot(。)intellisense告诉我在Base方法中添加方法。我不想看到添加方法从MyClass1派生实例?


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyDb;

namespace BaseClassUygulamasi { class Program { static void Main(string[] args) { new MyClass1().Save("123456789", "ali.yilmaz"); } } }

namespace MyDb {

public  abstract class MyBaseClass
{
    private Dictionary<string, string> dic { get; set; }

    public MyBaseClass()
    {

    }

    internal void Add(string key, string value)
    {
        dic.Add(key, value);
    }
}


public class MyClass1 : MyBaseClass
{
    public MyClass1()
        : base()
    {

    }

    public void Save(string TCKimlikNo, string AdSoyAd)
    {
        base.Add(TCKimlikNo, AdSoyAd);
    }
}

}

public abstract class MyBaseClass { private Dictionary<string, string> dic { get; set; } public MyBaseClass() { } internal void Add(string key, string value) { dic.Add(key, value); } } public class MyClass1 : MyBaseClass { public MyClass1() : base() { } public void Save(string TCKimlikNo, string AdSoyAd) { base.Add(TCKimlikNo, AdSoyAd); } }

3 个答案:

答案 0 :(得分:4)

制作Add方法protected而不是internal

答案 1 :(得分:3)

如果您希望从您的基类继承的类能够访问Add(...)方法,但没有外部任何内容,那么您需要将其标记为protected,这样:

public  abstract class MyBaseClass
{
    private Dictionary<string, string> dic { get; set; }

    public MyBaseClass()
    {

    }

    protected void Add(string key, string value)
    {
        dic.Add(key, value);
    }
}


public class MyClass1 : MyBaseClass
{
    public MyClass1()
        : base()
    {

    }

    public void Save(string TCKimlikNo, string AdSoyAd)
    {
        base.Add(TCKimlikNo, AdSoyAd);
    }
}

这样,只有从MyBaseClass继承的类才能访问Add(...)

答案 2 :(得分:0)

我认为你想要使用Protected关键字而不是内部。