A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们老师说是接口默认是internal类型,某个老师又说接口默认是public类型,接口默认到底是什么类型???有没有什么检验方法???

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

6 个回复

倒序浏览
接口默认访问基本为internal,但是如果在其他public类中使用时,必须为public;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
楼上正解:接口默认是internal
internal只可以被本组合体(Assembly)内所有的类存取,组合体是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名往往是“.DLL”或“.EXE”。
定义为public是为了方便在其他类中使用

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
前面两位都说明白了
如果你想实验的话 同时建立两个项目 先不要声明为public的
在另一个项目中去调用它你会发现,是找不到的 加上public后就可以了
所以默认的就是internal 同一项目下的接口都可以使用 要是调用其他项目中的接口
项目中的接口就必须声明为public

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
接口默认访为internal
要让其他类能访问并且调用就需要用public

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
与类一样,接口也默认定义为内部接口.
所以要使接口可以公开访问,必须使用public关键字.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
杨正 中级黑马 2012-7-10 09:36:24
7#
我们老师说是接口默认是internal类型,某个老师又说接口默认是public类型,接口默认到底是什么类型???有没有什么检验方法???

      interface的默认访问修饰符是interal,且此类型不允许其它访问修饰符;接口的成员默认访问修饰符是public,也不可能是其他访问修饰符。
可能你们老师一个说的是接口成员一个是接口本身咯。

检验方法:
1、interface的默认访问修饰符:
  1. 01: //02: // System.IConsoleDriver03: //04: // Author:
  2. 05: // Gonzalo Paniagua Javier (gonzalo@ximian.com)06: //
  3. 07: // (C) 2005 Novell, Inc. (http://www.novell.com)08: //09:
  4. 10: // Permission is hereby granted, free of charge, to any person obtaining
  5. 11: // a copy of this software and associated documentation files (the
  6. 12: // "Software"), to deal in the Software without restriction, including
  7. 13: // without limitation the rights to use, copy, modify, merge, publish,
  8. 14: // distribute, sublicense, and/or sell copies of the Software, and to
  9. 15: // permit persons to whom the Software is furnished to do so, subject to
  10. 16: // the following conditions:17: //
  11. 18: // The above copyright notice and this permission notice shall be
  12. 19: // included in all copies or substantial portions of the Software.20: //
  13. 21: // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  14. 22: // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  15. 23: // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  16. 24: // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  17. 25: // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  18. 26: // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  19. 27: // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.28: //
  20. 29: namespace System {30: interface IConsoleDriver {
  21. 31: ConsoleColor BackgroundColor { get; set; }
  22. 32: int BufferHeight { get; set; }
  23. 33: int BufferWidth { get; set; }34: bool CapsLock { get; }
  24. 35: int CursorLeft { get; set; }
  25. 36: int CursorSize { get; set; }
  26. 37: int CursorTop { get; set; }
  27. 38: bool CursorVisible { get; set; }
  28. 39: ConsoleColor ForegroundColor { get; set; }
  29. 40: bool KeyAvailable { get; }41: bool Initialized { get; }
  30. 42: int LargestWindowHeight { get; }
  31. 43: int LargestWindowWidth { get; }
  32. 44: bool NumberLock { get; }45: string Title { get; set; }
  33. 46: bool TreatControlCAsInput { get; set; }
  34. 47: int WindowHeight { get; set; }
  35. 48: int WindowLeft { get; set; }
  36. 49: int WindowTop { get; set; }
  37. 50: int WindowWidth { get; set; }51: 52: void Init ();
  38. 53: void Beep (int frequency, int duration);54: void Clear ();
  39. 55: void MoveBufferArea (int sourceLeft, int sourceTop, int sourceWidth, int sourceHeight,
  40. 56: int targetLeft, int targetTop, Char sourceChar,
  41. 57: ConsoleColor sourceForeColor, ConsoleColor sourceBackColor);
  42. 58: 59: ConsoleKeyInfo ReadKey (bool intercept);
  43. 60: void ResetColor ();
  44. 61: void SetBufferSize (int width, int height);
  45. 62: void SetCursorPosition (int left, int top);
  46. 63: void SetWindowPosition (int left, int top);
  47. 64: void SetWindowSize (int width, int height);
  48. 65: string ReadLine ();66: }67: }
复制代码
上述源程序定义了 IConsoleDriver 接口。上述源程序第 30 行没有明确指出访问修饰符,那么这个接口默认为 internal 的,只能在本程序集中使用。
当然,楼上说的分别指定修饰符的方法比较简单。

2、接口的成员默认访问修饰符:
  1. 1: .class private interface abstract auto ansi IControl
  2. 2: {
  3. 3: .method public hidebysig newslot abstract virtual instance void Paint() cil managed
  4. 4: {
  5. 5: }
  6. 6: }

复制代码
尽管C#在定义接口时不用指明接口方法的访问控制方式,但默认接口方法均为public型(这可以从反编译的IL代码中看到)。上面是使用Reflector查看的接口IL代码。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马