黑马程序员技术交流社区
标题:
C#中的接口默认是Public类型的还是internal类型的???
[打印本页]
作者:
侯慧杰
时间:
2012-7-9 10:28
标题:
C#中的接口默认是Public类型的还是internal类型的???
我们老师说是接口默认是internal类型,某个老师又说接口默认是public类型,接口默认到底是什么类型???有没有什么检验方法???
作者:
许庭洲
时间:
2012-7-9 10:33
接口默认访问基本为internal,但是如果在其他public类中使用时,必须为public;
作者:
魏振龙
时间:
2012-7-9 13:40
楼上正解:接口默认是internal
internal只可以被本组合体(Assembly)内所有的类存取,组合体是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名往往是“.DLL”或“.EXE”。
定义为public是为了方便在其他类中使用
作者:
孙宁宇
时间:
2012-7-9 14:58
前面两位都说明白了
如果你想实验的话 同时建立两个项目 先不要声明为public的
在另一个项目中去调用它你会发现,是找不到的 加上public后就可以了
所以默认的就是internal 同一项目下的接口都可以使用 要是调用其他项目中的接口
项目中的接口就必须声明为public
作者:
朱灿
时间:
2012-7-9 20:28
接口默认访为internal
要让其他类能访问并且调用就需要用public
作者:
钱灿
时间:
2012-7-9 20:44
与类一样,接口也默认定义为内部接口.
所以要使接口可以公开访问,必须使用public关键字.
作者:
杨正
时间:
2012-7-10 09:36
我们老师说是接口默认是internal类型,某个老师又说接口默认是public类型,接口默认到底是什么类型???有没有什么检验方法???
interface的默认访问修饰符是interal,且此类型不允许其它访问修饰符;接口的成员默认访问修饰符是public,也不可能是其他访问修饰符。
可能你们老师一个说的是接口成员一个是接口本身咯。
检验方法:
1、interface的默认访问修饰符:
01: //02: // System.IConsoleDriver03: //04: // Author:
05: // Gonzalo Paniagua Javier (gonzalo@ximian.com)06: //
07: // (C) 2005 Novell, Inc. (http://www.novell.com)08: //09:
10: // Permission is hereby granted, free of charge, to any person obtaining
11: // a copy of this software and associated documentation files (the
12: // "Software"), to deal in the Software without restriction, including
13: // without limitation the rights to use, copy, modify, merge, publish,
14: // distribute, sublicense, and/or sell copies of the Software, and to
15: // permit persons to whom the Software is furnished to do so, subject to
16: // the following conditions:17: //
18: // The above copyright notice and this permission notice shall be
19: // included in all copies or substantial portions of the Software.20: //
21: // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22: // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23: // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24: // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25: // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26: // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27: // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.28: //
29: namespace System {30: interface IConsoleDriver {
31: ConsoleColor BackgroundColor { get; set; }
32: int BufferHeight { get; set; }
33: int BufferWidth { get; set; }34: bool CapsLock { get; }
35: int CursorLeft { get; set; }
36: int CursorSize { get; set; }
37: int CursorTop { get; set; }
38: bool CursorVisible { get; set; }
39: ConsoleColor ForegroundColor { get; set; }
40: bool KeyAvailable { get; }41: bool Initialized { get; }
42: int LargestWindowHeight { get; }
43: int LargestWindowWidth { get; }
44: bool NumberLock { get; }45: string Title { get; set; }
46: bool TreatControlCAsInput { get; set; }
47: int WindowHeight { get; set; }
48: int WindowLeft { get; set; }
49: int WindowTop { get; set; }
50: int WindowWidth { get; set; }51: 52: void Init ();
53: void Beep (int frequency, int duration);54: void Clear ();
55: void MoveBufferArea (int sourceLeft, int sourceTop, int sourceWidth, int sourceHeight,
56: int targetLeft, int targetTop, Char sourceChar,
57: ConsoleColor sourceForeColor, ConsoleColor sourceBackColor);
58: 59: ConsoleKeyInfo ReadKey (bool intercept);
60: void ResetColor ();
61: void SetBufferSize (int width, int height);
62: void SetCursorPosition (int left, int top);
63: void SetWindowPosition (int left, int top);
64: void SetWindowSize (int width, int height);
65: string ReadLine ();66: }67: }
复制代码
上述源程序定义了 IConsoleDriver 接口。上述源程序第 30 行没有明确指出访问修饰符,那么这个接口默认为 internal 的,只能在本程序集中使用。
当然,楼上说的分别指定修饰符的方法比较简单。
2、接口的成员默认访问修饰符:
1: .class private interface abstract auto ansi IControl
2: {
3: .method public hidebysig newslot abstract virtual instance void Paint() cil managed
4: {
5: }
6: }
复制代码
尽管C#在定义接口时不用指明接口方法的访问控制方式,但默认接口方法均为public型(这可以从反编译的IL代码中看到)。上面是使用Reflector查看的接口IL代码。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2