2011-12-10 4 views
1

는 내가 테스트 테스트 알아야 할 코드를 개발 : 내가 내부 방법을 사용하는 경우, 우리는 forexample 다른 네임 스페이스 내 방법을 숨길 수 있습니다 : 기본 프로그램에 메서드를 추가 숨기는 방법을기본 클래스에서 기본 메서드를 숨기는 방법은 무엇입니까?

public vs. internal methods on an internal class

, 나는 점을 RESS 경우 (.) intellisense 기본 메서드에서 메서드를 추가하십시오. 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); 
    } 
} 

}

+3

내부 용은 네임 스페이스가 아닌 어셈블리 용입니다. –

답변

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

이렇게하면, inh MyBaseClass에서 삭제하면 Add(...)에 액세스 할 수 있습니다.

4

Add 방법을 internal 대신 protected으로 변경하십시오.

0

내부 대신 보호 된 키워드를 사용하고 싶다고 생각합니다.

관련 문제