CLR via C#学习笔记-第十三章-定义接口、继承接口

13.1 类和接口继承

接口是为了实现多继承

所有的类都继承了System.Object,及其四个公共实例方法:ToString、Equals、GetHashCode、GetType。

CLR允许定义接口,它实际只是对一组方法签名进行了统一命名。这些方法不提供任何实现。

类通过指定接口名称来继承接口,而且必须显式实现接口方法,否则CLR认为此类型定义无效。

实现接口方法的过程比较繁琐,所以说接口继承是实现多继承的一种缩水版机制。

编译器和CLR允许一个类继承多个接口,继承的所有接口都必须实现。

 

接口继承特点

类继承的一个重要特点是,凡是能使用基类型实例的地方,都能使用派生类型的实例。

类似的,凡是能够使用具名接口类型的实例的地方,都能使用实现了接口的一个类型的实例。

 

13.2 定义接口

接口还能定义事件、无参属性和有参属性。

所有这些东西的本质上都是方法,他们只是语法上的简化。

不过接口不能定义任何构造器方法,也不能定义任何实例字段。

 

接口不能定义静态成员

CLR允许接口定义静态方法、字段、常量和构造器,但符合CLS标准的接口决不允许,C#禁止接口定义任何一种静态成员。

 

接口定义就是类型定义

在CLR看来,接口定义就是类型定义。

也就是说CLR会为接口类型对象定义内部数据结构,同时可通过反射机制来查询接口类型的功能。

和类型一样,接口可在文件范围中定义,也可嵌套在另一个类型中。定义接口类型时可指定你希望的任何可见性、可访问性。

 

接口继承不是严格的继承

接口定义可以从另一个或多个接口继承。但它不是严格的继承。

接口继承的工作方式并不完全和类继承一样。

作者倾向于将接口结成看成是将其他接口的协定contract包括到2新接口中。

例如ICollection<T>接口定义包含了IEnumerable<T>和IEnumerable两个接口的协定,有下面两层含义:

1.继承ICollection<T>接口的任何类必须实现ICollection<T>、IEnumerable<T>和IEnumerable三个接口所定义的方法。

2.任何代码在引用实现ICollection<T>接口的对象时,该类型还实现了IEnumerable<T>和IEnumerable接口。

 

13.3 继承接口

显式为实现接口的方法标记virtual和隐式的区别

编译器要求将实现接口的方法标记为public。

CLR要求将接口方法标记为virtual,编译器会将他们标记为virtual和sealed。这会阻止派生类重写接口方法。

将方法显式标记为virtual,编译器就会将该方法标记为virtual并保持它的非密封状态,使派生类能重写它。

 

派生类重写基类实现的接口方法

派生类不能重写sealed的接口方法,但派生类可重新继承同一个接口,并为接口方法提供自己的实现。

下例对此进行了演示:

//派生自Object,他实现了IDisposable
internal class Base:IDisposable{
    public void Dispose(){
        Console.WriteLine("Base's Dispose");
    }
}
//重新实现了IDisposable
internal class Derived:Base,IDisposable{
    new public void Dispose(){
        Console.WriteLine("Base's Dispose");
    }
}

在Main函数中进行调用:

/*****************第一个例子****************/
Base b=new Base();
//用b的类型调用Dispose,显示"Base's Dispose"
b.Dispose();
//用b的对象的类型调用Dispose,显示"Base's Dispose"
((IDisposable)b).Dispose();

/*****************第二个例子****************/
Derived d=new Derived();
//用d的类型调用Dispose,显示"Derived's Dispose"
d.Dispose();
//用d的对象的类型调用Dispose,显示"Derived's Dispose"
((IDisposable)d).Dispose();

/*****************第三个例子****************/
b=new Derived();
//用b的类型调用Dispose,显示"Base's Dispose"
b.Dispose();
//用b的对象的类型调用Dispose,显示"Derived's Dispose"
((IDisposable)b).Dispose();

 

转载于:https://www.cnblogs.com/errornull/p/9905469.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CLR via C# 第4版 英文PDFKristin, words cannot express how /feel about our life together. cherish our family and all our adventures. I'm filled each day with love for Aidan (age 9)and Grant (age 5), you both have been an inspira- tion to me and have taught me to play and have fun Watching the two of you grow up has been so rewarding and enjoyable for me. am lucky to be able to partake in your lives. love and ap preciate you more than you could ever know Contents at a glance Introduction PART I CLR BASICS CHAPTER 1 The clr's execution model CHAPTER 2 Building, Packaging, Deploying, and Administering Applications and Types 33 chaPTeR 3 Shared Assemblies and Strongly Named Assemblies 65 PART I DESIGNING TYPES CHAPTER 4 Type Fundamentals 91 CHAPTER 5 Primitive, Reference, and Value Types 111 CHAPTER 6 Type and Member Basics 151 CHAPTER 7 Constants and fields 175 chaPTer 8 Methods 181 chaPTer 9 Parameters 209 CHAPTER 10 Properties 227 CHAPTER 11 Events 249 CHAPTER 12 Generics 265 CHAPTER 13 Interfaces 295 PARTⅢ ESSENTIAL TYPES CHAPTER 14 Chars, Strings, and Working with Text 317 CHAPTER 15 Enumerated Types and Bit Flags 361 CHAPTER 16 Arrays 373 CHAPTER 17 Delegates 391 CHAPTER 18 Custom Attributes 421 CHAPTER 19 Nullable value Types 441 PART IV CORE FACILITIES CHAPTER 20 Exceptions and state management 451 CHAPTER 21 The Managed Heap and Garbage Collection 505 CHAPTER 22 CLR Hosting and AppDomains 553 CHAPTER 23 Assembly Loading and reflection 583 CHAPTER 24 Runtime serialization 611 CHAPTER 25 Interoperating with WinRT Components 643 PAR V THREADING ChaPTEr 26 Thread basics 669 CHAPTER 27 Compute-Bound Asynchronous Operations 691 CHAPTER 28 IyO-Bound Asynchronous Operations 727 CHAPTER 29 Primitive thread Synchronization Constructs 757 CHAPTER 30 Hybrid Thread Synchronization Constructs 789 Index 823 Contents at a glance Contents Introduction XX PART CLR BASICS Chapter 1 The Clrs Execution Model 3 Compiling Source Code into Managed Modules Combining managed modules into assemblies Loading the Common Language Runtime 8 Executing Your Assembly's Code 11 IL and∨ erification 16 Unsafe Code The Native Code generator tool: ngen. exe 19 The Framework Class Library 22 The Common Type System The Common Language Specification Interoperability with Unmanaged Code 30 Chapter 2 Building, Packaging, Deploying, and Administering Applications and Types 33 NET Framework Deployment Goals 34 Building Types into a Module 35 Response Fil 36 A Brief Look at metadata 38 What do you think of this book We want to hear from you Microsoft is interested in hearing your feedback so we can continually improve our books and learning resources for you. To participate in a brief online survey, please visit microsoft. com/learning/booksurvey Combining Modules to Form an Assembly 45 Adding Assemblies to a Project by Using the Visual Studio IDE.51 Using the assembly Linker Adding Resource Files to an Assembly 53 Assembly Version Resource Information .54 Version numbers ..58 Culture Simple Application Deployment(Privately deployed Assemblies)...60 Simple Administrative Control(Configuration) 62 Chapter 3 Shared Assemblies and Strongly Named Assemblies 65 Two Kinds of Assemblies, Two Kinds of Deployment 66 Giving an Assembly a Strong Name 67 The global Assembly Cache 72 Building an Assembly That References a Strongly Named Assembly..74 Strongly named assemblies are tamper-Resistant 75 Delayed Signing Privately Deploying Strongly Named Assemblies How the Runtime Resolves Type References 80 Advanced Administrative Control( Configuration) 83 Publisher Policy control 86 PART I DESIGNING TYPES Chapter 4 Type Fundamentals 91 All Types Are Derived from System Object .91 Casting Between Types 93 Casting with the C# is and as Operators Namespaces and assemblies 97 How Things relate at Run time .101 Chapter 5 Primitive, Reference, and Value Types 111 Programming Language Primitive Types 111 Checked and Unchecked Primitive Type Operations 115 Reference Types and value Types 118 Boxing and Unboxing Value Types 124 Changing Fields in a Boxed Value Type by Using Interfaces and Why You Shouldnt Do This) 136 Object Equality and Identity 139 Object hash Codes .142 The dynamic Primitive Type ......144 Chapter 6 Type and member Basics 151 The Different Kinds of Type Members .151 Type visibilit 154 Friend assemblies 154 Member accessibility .156 Static Classes ...158 Partial Classes, Structures, and Interfaces .159 Components, Polymorphism, and Versioning 160 How the CLR Calls Virtual Methods, Properties, and Events 162 Using Type Visibility and Member Accessibility Intelligently...166 Dealing with Virtual Methods When Versioning Types 16 Chapter 7 Constants and Fields 175 Constants 175 Fⅰe|ds ...177 Chapter 8 Methods 181 Instance Constructors and Classes(Reference Types) 181 Instance Constructors and Structures(Value Types) 184 Type Constructors 187 Contents x Operator Overload Methods 191 Operators and Programming Language Interoperability 193 Conversion Operator Methods 195 Extension method 198 Rules and guidelines ....,200 Extending Various Types with Extension Methods 201 The Extension Attribute 203 Partial Methods 204 Rules and guidelines 207 Chapter 9 Parameters 209 Optional and Named Parameters 209 Rules and guidelines 210 The defaultParameter value and optional Attributes 212 Implicitly Typed Local Variabl 212 Passing parameters by reference to a Method 214 Passing a variable Number of arguments to a Method 220 Parameter and Return Type Guidelines 223 Const-nes 224 Chapter 10 Properties 227 Parameterless Properties 227 Automatically Implemented Properties 231 Defining Properties Intelligently 232 Object and collection Initializers 235 Anonymous Type .237 The System. Tuple type 240 Parameterful Properties 242 The performance of calling property accessor Methods 247 Property Accessor Accessibility 248 Generic prop A roperty Access 248

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值