인터페이스 방법의 스텔스와 디스플레이 실현
9532 단어 이음매
참고: Snippet Compiler Live 2008 편집기 사용
1 public static void RunSnippet()
2 {
3 ITest a = new Test();
4 a.Say(); // 1
5
6 a = new App();
7 a.Say(); // 2
8
9 a = new Strong();
10 a.Say(); // 3
11
12 Test t = new Test();
13 t.Say(); // 4
14
15 t = new App();
16 t.Say(); // 5
17 ((ITest)t).Say(); // 6
18
19 t = new Strong();
20 t.Say(); // 7
21 ((ITest)t).Say(); // 8
22
23 Strong s = new Strong();
24 s.Say(); // 9
25 ((ITest)s).Say(); // 10
26 }
27
28 public class Test : ITest
29 {
30 public void Say()
31 {
32 Console.WriteLine("Test Says.");
33 }
34
35 void ITest.Say()
36 {
37 Console.WriteLine("ITest Says.");
38 }
39 }
40
41 public class App : Test, ITest
42 {
43 new public void Say()
44 {
45 Console.WriteLine("App says.");
46 }
47 }
48
49 public class Strong : Test/*, ITest*/
50 {
51 /*
52 new public void Say()
53 {
54 Console.WriteLine("Strong says.");
55 }
56 */
57 }
58
59 public interface ITest
60 {
61 void Say();
62 }
출력 결과는 다음과 같습니다.
1 ITest Says.(인터페이스 디스플레이 구현, 인터페이스 유형은 인터페이스 방법만 호출)
2 App Says.(Test를 계승했지만 인터페이스를 다시 계승하고 인터페이스 방법을 다시 썼다)
3 ITest Says.(Test 상속, 인터페이스 디스플레이 구현 방법도 상속)
4 Test Says.(Test 객체, 인터페이스 방법 대신 객체 메소드 호출)
5 Test Says.(왜 App Says가 아닐까? App이 다시 실현하는 것은 인터페이스 방법이고 Test의 인터페이스 방법은 다시 쓸 수 없기 때문에 Test의 대상인 방법을 호출한다)
6 App says.(왜 ITest Says가 아닙니까? App은 인터페이스 방법을 실현했고 인터페이스는 App 인터페이스 방법을 사용했기 때문입니다. 게다가 Test의 디스플레이 인터페이스 방법은 개인적인 것입니다.)
7 Test Says.(Test 유형 메서드를 상속함)
8 ITest Says.(인터페이스 유형 디스플레이 인터페이스 방법 호출)
9 Test Says.(Test 객체 메서드 상속)
10 ITest Says.(인터페이스 유형 디스플레이 인터페이스 방법 호출)
왜 위의 결과가 나왔을까요?
하나의 유형이 인터페이스를 실현할 때 C#를 컴파일할 때 하나의 유형의 대상 방법과 인터페이스 방법을 동시에 생성했는데 그들 두 인용의 실현은 같은 방법이다.
인터페이스 구현 방법을 표시하고 유형의 대상 방법을 동시에 실현할 때 구분되며 인터페이스 방법의 접근 속성은 컴파일러가 메타데이터를 생산할 때 개인으로 지정하여 유형의 실례 호출을 방지합니다.이렇게 인터페이스 표시 방법은 인터페이스 형식으로만 호출할 수 있고, 반대로 인터페이스 형식으로 호출할 때 인터페이스 방법만 호출할 수 있다.
다른 한편, 디스플레이 인터페이스 방법은 파생류에 의해 다시 쓸 수 없다. 디스플레이 인터페이스 방법은 유형의 대상 모델의 일부분에 속하지 않기 때문에 하나의 인터페이스(한 그룹의 행위나 방법)를 하나의 유형에 연결하고 노출 행위/방법을 피하는 방식이다.
프레임 디자인(두 번째 버전) CLR Via C# 14장 5절(14.5) 인터페이스 방법의 스텔스 및 디스플레이 구현(비하인드 디테일) 참조
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
의아하게도 아버지 대상의 인터페이스도 대상에게 물려받는다앞에서 우리가 이미 보았듯이 인터페이스는 능력이고 증서이며 인터페이스가 없는 대상은 좋은 대상이 아니다. 그러면 어떤 대상들은 어떤 인터페이스도 실현하지 못했지만 그들은 여전히 좋은 대상이다. 왜?그들은 아버지의 대...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.