zoukankan      html  css  js  c++  java
  • CLR via C#, Third Edition图书推荐及下载

    我们先来看看这书的作者Jeffrey Richter,Jeffrey Richter是一位在全球享有盛誉的技术作家,尤其在Windows/.NET领域有着杰出的贡献。他的第一本Windows著作Windows 3: A Developer's Guide大获好评,从而声名远扬。之后,他又推出了经典著作《Windows 高级编程指南》和《Windows核心编程》。如今这两本书早已成为Windows程序设计领域的颠峰之作,培育了几代软件开发设计人员。他的每一本新作问世,我们都有理由相信这是一本巨著,我们想要的一切尽在其中。Jeffery 是Wintellect公司的创始人之一,也是MSDN杂志.NET专栏的特邀编辑。现在他正领导开发该公司的.NET程序设计课程,向大众推广.NET技术。因为他自1999年开始就参与了微软.NET框架开发组的咨询工作,与这些一线人员一起经历了.NET的孕育与诞生,所以他对.NET思想的领悟、对.NET的细节熟稔,是其他任何作家难以企及的。他是.NET著作领域中当之无愧的一面旗帜。

    2003年我买了这本书的第一版《Microsoft .NET框架程序设计(修订版)》,从那时我才真正深入了解.net,后来这本书被朋友借去没还,很让我咬牙切齿了一阵。

    2006年我买了这本书的第二版《框架设计(第2版):CLR Via C#》,没完全看完,翻译的虽然不如第一版,但还不算垃圾,英文不太好的可以买本看看,但如果英文过的去也比较有空的话可以看看原版,网上有电子版下载

    前天我在网上看到了这本书的最新版,下载,本来想看完再仔细写个读后感的,但鉴于全书896页,我觉得以我读英文的速度和我空余时间综合计算没3个月拿不下来,别耽误的别人,就先推荐一下吧。

    作者:Jeffrey Richter

    出版日期:February 2010

    出版社:Microsoft Press

    页数:896

    ISBN:978-0-7356-4045-0

    目录:

    Part I CLR Basics

    1 The CLRs Execution Model . 1

    Compiling Source Code into Managed Modules . 1

    Combining Managed Modules into Assemblies 5

    Loading the Common Language Runtime 6

    Executing Your Assemblys Code 9

    IL and Verification 15

    Unsafe Code 16

    The Native Code Generator Tool: NGen.exe . 18

    The Framework Class Library . 20

    The Common Type System 22

    The Common Language Specification . 25

    Interoperability with Unmanaged Code 29

    2 Building, Packaging, Deploying, and Administering Applications

    and Types 31

    .NET Framework Deployment Goals 32

    Building Types into a Module 33

    Response Files . 34

    A Brief Look at Metadata . 36

    Combining Modules to Form an Assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43

    Adding Assemblies to a Project by Using the Visual Studio IDE 49

    Using the Assembly Linker 50

    Adding Resource Files to an Assembly . 52

    Assembly Version Resource Information . 53

    Version Numbers 57

    Culture . 58

    Simple Application Deployment (Privately Deployed Assemblies) . 59

    Simple Administrative Control (Configuration) 61

    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 73

    Building an Assembly That References a Strongly Named Assembly 75

    Strongly Named Assemblies Are Tamper-Resistant 76

    Delayed Signing . 77

    Privately Deploying Strongly Named Assemblies 80

    How the Runtime Resolves Type References 81

    Advanced Administrative Control (Configuration) 84

    Publisher Policy Control 87

    Part II Designing Types

    4 Type Fundamentals 91

    All Types Are Derived from System.Object . 91

    Casting Between Types . 93

    Casting with the C# is and as Operators . 95

    Namespaces and Assemblies . 97

    How Things Relate at Runtime 102

    5 Primitive, Reference, and Value Types . 113

    Programming Language Primitive Types 113

    Checked and Unchecked Primitive Type Operations . 117

    Reference Types and Value Types . 121

    Boxing and Unboxing Value Types . 127

    Changing Fields in a Boxed Value Type by Using Interfaces (and Why You

    Shouldnt Do This) . 140

    Object Equality and Identity 143

    Object Hash Codes 146

    The dynamic Primitive Type 148

    6 Type and Member Basics . 155

    The Different Kinds of Type Members . 155

    Type Visibility 158

    Friend Assemblies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159

    Member Accessibility 160

    Static Classes . 162

    Partial Classes, Structures, and Interfaces . 164

    Components, Polymorphism, and Versioning 165

    How the CLR Calls Virtual Methods, Properties, and Events 167

    Using Type Visibility and Member Accessibility Intelligently . 172

    Dealing with Virtual Methods When Versioning Types . . . . . . . . . . . . . . . . . . . . .175

    7 Constants and Fields 181

    Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181

    Fields 183

    8 Methods . 187

    Instance Constructors and Classes (Reference Types) . 187

    Instance Constructors and Structures (Value Types) . 191

    Type Constructors 194

    Type Constructor Performance 198

    Operator Overload Methods . 200

    Operators and Programming Language Interoperability . 203

    Conversion Operator Methods 204

    Extension Methods 207

    Rules and Guidelines 210

    Extending Various Types with Extension Methods 211

    The Extension Attribute 213

    Partial Methods 213

    Rules and Guidelines 216

    9 Parameters . 219

    Optional and Named Parameters . 219

    Rules and Guidelines 220

    The DefaultParameterValue and Optional Attributes 222

    Implicitly Typed Local Variables 223

    Passing Parameters by Reference to a Method 225

    Passing a Variable Number of Arguments to a Method . 231

    Parameter and Return Type Guidelines . 233

    Const-ness 235

    10 Properties 237

    Parameterless Properties 237

    Automatically Implemented Properties . 241

    Defining Properties Intelligently 242

    Object and Collection Initializers 245

    Anonymous Types 247

    The System.Tuple Type 250

    Parameterful Properties . 252

    The Performance of Calling Property Accessor Methods 257

    Property Accessor Accessibility . 258

    Generic Property Accessor Methods 258

    11 Events . 259

    Designing a Type That Exposes an Event 260

    Step #1: Define a type that will hold any additional information

    that should be sent to receivers of the event notification 261

    Step #2: Define the event member . 262

    Step #3: Define a method responsible for raising the event to

    notify registered objects that the event has occurred . 263

    Step #4: Define a method that translates the input into the desired event 266

    How the Compiler Implements an Event . 266

    Designing a Type That Listens for an Event 269

    Explicitly Implementing an Event 271

    12 Generics . 275

    Generics in the Framework Class Library . 280

    Wintellects Power Collections Library . 281

    Generics Infrastructure . 282

    Open and Closed Types 283

    Generic Types and Inheritance 285

    Generic Type Identity 287

    Code Explosion . 288

    Generic Interfaces 289

    Generic Delegates 290

    Delegate and Interface Contravariant and Covariant Generic Type Arguments 291

    Generic Methods . 293

    Generic Methods and Type Inference 294

    Generics and Other Members . 296

    Verifiability and Constraints . 296

    Primary Constraints 299

    Secondary Constraints . 300

    Constructor Constraints 301

    Other Verifiability Issues . 302

    13 Interfaces . 307

    Class and Interface Inheritance . 308

    Defining an Interface 308

    Inheriting an Interface 310

    More About Calling Interface Methods . 312

    Implicit and Explicit Interface Method Implementations (Whats Happening

    Behind the Scenes) . 314

    Generic Interfaces 315

    Generics and Interface Constraints 318

    Implementing Multiple Interfaces That Have the Same Method Name

    and Signature 319

    Improving Compile-Time Type Safety with Explicit Interface Method

    Implementations 320

    Be Careful with Explicit Interface Method Implementations . 322

    Design: Base Class or Interface? 325

    Part III Essential Types

    14 Chars, Strings, and Working with Text 327

    Characters . 327

    The System.String Type . 330

    Constructing Strings 330

    Strings Are Immutable . 333

    Comparing Strings . 334

    String Interning . 340

    String Pooling . 343

    Examining a Strings Characters and Text Elements . 343

    Other String Operations 346

    Constructing a String Efficiently 346

    Constructing a StringBuilder Object 347

    StringBuilder Members 348

    Obtaining a String Representation of an Object: ToString 350

    Specific Formats and Cultures 351

    Formatting Multiple Objects into a Single String . 355

    Providing Your Own Custom Formatter . 356

    Parsing a String to Obtain an Object: Parse . 359

    Encodings: Converting Between Characters and Bytes 361

    Encoding and Decoding Streams of Characters and Bytes 367

    Base-64 String Encoding and Decoding 368

    Secure Strings . 369

    15 Enumerated Types and Bit Flags 373

    Enumerated Types . 373

    Bit Flags . 379

    Adding Methods to Enumerated Types . 383

    16 Arrays 385

    Initializing Array Elements 388

    Casting Arrays 390

    All Arrays Are Implicitly Derived from System.Array . 392

    All Arrays Implicitly Implement IEnumerable, ICollection, and IList 393

    Passing and Returning Arrays 394

    Creating Non-ZeroLower Bound Arrays 395

    Array Access Performance 396

    Unsafe Array Access and Fixed-Size Array 401

    17 Delegates . 405

    A First Look at Delegates 405

    Using Delegates to Call Back Static Methods . 408

    Using Delegates to Call Back Instance Methods 409

    Demystifying Delegates 410

    Using Delegates to Call Back Many Methods (Chaining) . 415

    C#s Support for Delegate Chains . 419

    Having More Control over Delegate Chain Invocation . 419

    Enough with the Delegate Definitions Already (Generic Delegates) 422

    C#s Syntactical Sugar for Delegates 423

    Syntactical Shortcut #1: No Need to Construct a Delegate Object 424

    Syntactical Shortcut #2: No Need to Define a Callback Method 424

    Syntactical Shortcut #3: No Need to Wrap Local Variables in a Class

    Manually to Pass Them to a Callback Method 428

    Delegates and Reflection . 431

    18 Custom Attributes 435

    Using Custom Attributes 435

    Defining Your Own Attribute Class . 439

    Attribute Constructor and Field/Property Data Types 443

    Detecting the Use of a Custom Attribute 444

    Matching Two Attribute Instances Against Each Other 448

    Detecting the Use of a Custom Attribute Without Creating Attribute-Derived

    Objects . 451

    Conditional Attribute Classes 454

    19 Nullable Value Types 457

    C#s Support for Nullable Value Types . 459

    C#s Null-Coalescing Operator 462

    The CLR Has Special Support for Nullable Value Types 463

    Boxing Nullable Value Types 463

    Unboxing Nullable Value Types . 463

    Calling GetType via a Nullable Value Type . 464

    Calling Interface Methods via a Nullable Value Type 464

    Part IV Core Facilities

    20 Exceptions and State Management . 465

    Defining Exception . 466

    Exception-Handling Mechanics 467

    The try Block . 468

    The catch Block . 469

    The finally Block 470

    The System.Exception Class 474

    FCL-Defined Exception Classes 478

    Throwing an Exception . 480

    Defining Your Own Exception Class . 481

    Trading Reliability for Productivity . 484

    Guidelines and Best Practices 492

    Use finally Blocks Liberally 492

    Dont Catch Everything 494

    Recovering Gracefully from an Exception 495

    Backing Out of a Partially Completed Operation When an Unrecoverable

    Exception OccursMaintaining State 496

    Hiding an Implementation Detail to Maintain a Contract . 497

    Unhandled Exceptions 500

    Debugging Exceptions 504

    Exception-Handling Performance Considerations 506

    Constrained Execution Regions (CERs) . 509

    Code Contracts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .512

    21 Automatic Memory Management (Garbage Collection) 519

    Understanding the Basics of Working in a Garbage-Collected Platform 520

    Allocating Resources from the Managed Heap 521

    The Garbage Collection Algorithm 523

    Garbage Collections and Debugging 527

    Using Finalization to Release Native Resources . 530

    Guaranteed Finalization Using CriticalFinalizerObject Types . 532

    Interoperating with Unmanaged Code by Using SafeHandle Types 535

    Using Finalization with Managed Resources 537

    What Causes Finalize Methods to Be Called? 540

    Finalization Internals . 541

    The Dispose Pattern: Forcing an Object to Clean Up 544

    Using a Type That Implements the Dispose Pattern . 548

    C#s using Statement . 551

    An Interesting Dependency Issue . 554

    Monitoring and Controlling the Lifetime of Objects Manually . 555

    Resurrection 566

    Generations . 568

    Other Garbage Collection Features for Use with Native Resources . 574

    Predicting the Success of an Operation that Requires a Lot of Memory 578

    Programmatic Control of the Garbage Collector 580

    Thread Hijacking 583

    Garbage Collection Modes 585

    Large Objects . 588

    Monitoring Garbage Collections 589

    22 CLR Hosting and AppDomains . 591

    CLR Hosting 592

    AppDomains . 594

    Accessing Objects Across AppDomain Boundaries 597

    AppDomain Unloading . 609

    AppDomain Monitoring . 610

    AppDomain First-Chance Exception Notifications 612

    How Hosts Use AppDomains . 612

    Executable Applications 612

    Microsoft Silverlight Rich Internet Applications . 613

    Microsoft ASP.NET Web Forms and XML Web Services Applications 613

    Microsoft SQL Server . 614

    Your Own Imagination 614

    Advanced Host Control 615

    Managing the CLR by Using Managed Code 615

    Writing a Robust Host Application . 616

    How a Host Gets Its Thread Back 617

    23 Assembly Loading and Reflection 621

    Assembly Loading 621

    Using Reflection to Build a Dynamically Extensible Application . . . . . . . . . . . . . . . . . . .626

    Reflection Performance 627

    Discovering Types Defined in an Assembly . 628

    What Exactly Is a Type Object? 628

    Building a Hierarchy of Exception-Derived Types 631

    Constructing an Instance of a Type 632

    Designing an Application That Supports Add-Ins . 634

    Using Reflection to Discover a Types Members 637

    Discovering a Types Members 638

    BindingFlags: Filtering the Kinds of Members That Are Returned . 643

    Discovering a Types Interfaces 644

    Invoking a Types Members 646

    Bind Once, Invoke Multiple Times . 650

    Using Binding Handles to Reduce Your Processs Memory Consumption . 658

    24 Runtime Serialization . 661

    Serialization/Deserialization Quick Start . 662

    Making a Type Serializable 667

    Controlling Serialization and Deserialization 668

    How Formatters Serialize Type Instances 672

    Controlling the Serialized/Deserialized Data 673

    How to Define a Type That Implements ISerializable when the Base

    Type Doesnt Implement This Interface 678

    Streaming Contexts . 680

    Serializing a Type as a Different Type and Deserializing an Object as a

    Different Object 682

    Serialization Surrogates 684

    Surrogate Selector Chains 688

    Overriding the Assembly and/or Type When Deserializing an Object 689

    Part V Threading

    25 Thread Basics . 691

    Why Does Windows Support Threads? 691

    Thread Overhead . 692

    Stop the Madness 696

    CPU Trends 699

    NUMA Architecture Machines . 700

    CLR Threads and Windows Threads . 703

    Using a Dedicated Thread to Perform an Asynchronous Compute-Bound

    Operation . 704

    Reasons to Use Threads 706

    Thread Scheduling and Priorities 708

    Foreground Threads versus Background Threads . 713

    What Now? 715

    26 Compute-Bound Asynchronous Operations 717

    Introducing the CLRs Thread Pool . 718

    Performing a Simple Compute-Bound Operation . 719

    Execution Contexts 721

    Cooperative Cancellation . 722

    Tasks . 726

    Waiting for a Task to Complete and Getting Its Result . 727

    Cancelling a Task 729

    Starting a New Task Automatically When Another Task Completes . 731

    A Task May Start Child Tasks 733

    Inside a Task 733

    Task Factories 735

    Task Schedulers . 737

    Parallels Static For, ForEach, and Invoke Methods 739

    Parallel Language Integrated Query 743

    Performing a Periodic Compute-Bound Operation 747

    So Many Timers, So Little Time 749

    How the Thread Pool Manages Its Threads 750

    Setting Thread Pool Limits 750

    How Worker Threads Are Managed . 751

    Cache Lines and False Sharing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .752

    27 I/O-Bound Asynchronous Operations . 755

    How Windows Performs I/O Operations . 755

    The CLRs Asynchronous Programming Model (APM) 761

    The AsyncEnumerator Class 765

    The APM and Exceptions 769

    Applications and Their Threading Models 770

    Implementing a Server Asynchronously 773

    The APM and Compute-Bound Operations 774

    APM Considerations 776

    Using the APM Without the Thread Pool 776

    Always Call the EndXxx Method, and Call It Only Once . 777

    Always Use the Same Object When Calling the EndXxx Method . 778

    Using ref, out, and params Arguments with BeginXxx and

    EndXxx Methods 778

    You Cant Cancel an Asynchronous I/O-Bound Operation 778

    Memory Consumption 778

    Some I/O Operations Must Be Done Synchronously . 779

    FileStream-Specific Issues . 780

    I/O Request Priorities 780

    Converting the IAsyncResult APM to a Task 783

    The Event-Based Asynchronous Pattern 784

    Converting the EAP to a Task . 786

    Comparing the APM and the EAP . 788

    Programming Model Soup 788

    28 Primitive Thread Synchronization Constructs 791

    Class Libraries and Thread Safety . 793

    Primitive User-Mode and Kernel-Mode Constructs 794

    User-Mode Constructs 796

    Volatile Constructs . 797

    Interlocked Constructs 803

    Implementing a Simple Spin Lock . 807

    The Interlocked Anything Pattern . 811

    Kernel-Mode Constructs 813

    Event Constructs . 817

    Semaphore Constructs 819

    Mutex Constructs . 820

    Calling a Method When a Single Kernel Construct Becomes Available . 822

    29 Hybrid Thread Synchronization Constructs 825

    A Simple Hybrid Lock 826

    Spinning, Thread Ownership, and Recursion 827

    A Potpourri of Hybrid Constructs . 829

    The ManualResetEventSlim and SemaphoreSlim Classes 830

    The Monitor Class and Sync Blocks . 830

    The ReaderWriterLockSlim Class . 836

    The OneManyLock Class 838

    The CountdownEvent Class . 841

    The Barrier Class . 841

    Thread Synchronization Construct Summary 842

    The Famous Double-Check Locking Technique . 844

    The Condition Variable Pattern . 848

    Using Collections to Avoid Holding a Lock for a Long Time . 851

    The Concurrent Collection Classes . 856

    Index . 861

  • 相关阅读:
    js中的单例模式
    node.js
    vscode设置
    Array.from();Object.keys();Array.map()
    js题
    如何申请成为企业微信,并成为第三方服务商
    微信企业号第三方平台应用开发
    SQL Server 给表和字段添加说明
    sql 语句写的行列转换
    不同数据库之间复制表的数据的方法
  • 原文地址:https://www.cnblogs.com/nuaalfm/p/1669059.html
Copyright © 2011-2022 走看看