我们老师说是接口默认是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代码。
|