我开发了一些代码来测试。我知道:如果我使用内部方法,我们可以在另一个命名空间中隐藏我的方法,例如:
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); } }
答案 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关键字而不是内部。