【问题标题】:How to hide base method from Base Class?如何从基类中隐藏基方法?
【发布时间】:2012-01-17 09:45:01
【问题描述】:

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

public vs. internal methods on an internal class

如何在主程序中隐藏 Add 方法;如果我按 dot(.) intellisense 向我显示 Base 方法中的 Add 方法。我不想看到从 MyClass1 派生实例的 add 方法?


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

}

【问题讨论】:

  • internal 用于程序集,而不用于命名空间!

标签: c# .net oop design-patterns


【解决方案1】:

如果您希望从您的基类继承的类可以访问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】:

    Add 方法设为protected 而不是internal

    【讨论】:

      【解决方案3】:

      我认为您想使用 Protected 关键字而不是 internal。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 2013-03-30
        • 2021-10-30
        相关资源
        最近更新 更多