Книги и журналы » Компьютерная литература » Программирование (книги)
C# Notes for ProfessionalsГод издания: 2018
Издательство: [Stack Overflow Contributors]
ISBN: отсутствует
Язык: Английский
Формат: PDF
Качество: Издательский макет или текст (eBook)
Интерактивное оглавление: Да
Количество страниц: 808
Описание: This C# Notes for Professionals book is compiled from Stack Overflow Documentation, the content is written by the beautiful people at Stack Overflow. Text content is released under Creative Commons BY-SA, see credits at the end of this book whom contributed to the various chapters. Images may be copyright of their respective owners unless otherwise specified. This is an unofficial free book created for educational purposes and is not affiliated with official C# group(s) or company(s) nor Stack Overflow. All trademarks and registered trademarks are the property of their respective company owners.
[spoiler="Примеры страниц"]

[/spoiler]
[spoiler="Оглавление"]
About 1
Chapter 1: Getting started with C# Language 2
Section 1.1: Creating a new console application (Visual Studio) 2
Section 1.2: Creating a new project in Visual Studio (console application) and Running it in Debug mode 4
Section 1.3: Creating a new program using .NET Core 7
Section 1.4: Creating a new program using Mono 9
Section 1.5: Creating a new query using LinqPad 9
Section 1.6: Creating a new project using Xamarin Studio 12
Chapter 2: Literals 18
Section 2.1: uint literals 18
Section 2.2: int literals 18
Section 2.3: sbyte literals 18
Section 2.4: decimal literals 18
Section 2.5: double literals 18
Section 2.6: float literals 18
Section 2.7: long literals 18
Section 2.8: ulong literal 18
Section 2.9: string literals 19
Section 2.10: char literals 19
Section 2.11: byte literals 19
Section 2.12: short literal 19
Section 2.13: ushort literal 19
Section 2.14: bool literals 19
Chapter 3: Operators 20
Section 3.1: Overloadable Operators 20
Section 3.2: Overloading equality operators 21
Section 3.3: Relational Operators 22
Section 3.4: Implicit Cast and Explicit Cast Operators 24
Section 3.5: Short-circuiting Operators 25
Section 3.6: ? : Ternary Operator 26
Section 3.7: ?. (Null Conditional Operator) 27
Section 3.8: "Exclusive or" Operator 27
Section 3.9: default Operator 28
Section 3.10: Assignment operator '=' 28
Section 3.11: sizeof 28
Section 3.12: ?? Null-Coalescing Operator 29
Section 3.13: Bit-Shifting Operators 29
Section 3.14: => Lambda operator 29
Section 3.15: Class Member Operators: Null Conditional Member Access 31
Section 3.16: Class Member Operators: Null Conditional Indexing 31
Section 3.17: Postfix and Prefix increment and decrement 31
Section 3.18: typeof 32
Section 3.19: Binary operators with assignment 32
Section 3.20: nameof Operator 32
Section 3.21: Class Member Operators: Member Access 33
Section 3.22: Class Member Operators: Function Invocation 33
Section 3.23: Class Member Operators: Aggregate Object Indexing 33
Chapter 4: Conditional Statements 34
Section 4.1: If-Else Statement 34
Section 4.2: If statement conditions are standard boolean expressions and values 34
Section 4.3: If-Else If-Else Statement 35
Chapter 5: Equality Operator 36
Section 5.1: Equality kinds in c# and equality operator 36
Chapter 6: Equals and GetHashCode 37
Section 6.1: Writing a good GetHashCode override 37
Section 6.2: Default Equals behavior 37
Section 6.3: Override Equals and GetHashCode on custom types 38
Section 6.4: Equals and GetHashCode in IEqualityComparator 39
Chapter 7: Null-Coalescing Operator 41
Section 7.1: Basic usage 41
Section 7.2: Null fall-through and chaining 41
Section 7.3: Null coalescing operator with method calls 42
Section 7.4: Use existing or create new 43
Section 7.5: Lazy properties initialization with null coalescing operator 43
Chapter 8: Null-conditional Operators 44
Section 8.1: Null-Conditional Operator 44
Section 8.2: The Null-Conditional Index 44
Section 8.3: Avoiding NullReferenceExceptions 45
Section 8.4: Null-conditional Operator can be used with Extension Method 45
Chapter 9: nameof Operator 47
Section 9.1: Basic usage: Printing a variable name 47
Section 9.2: Raising PropertyChanged event 47
Section 9.3: Argument Checking and Guard Clauses 48
Section 9.4: Strongly typed MVC action links 48
Section 9.5: Handling PropertyChanged events 49
Section 9.6: Applied to a generic type parameter 49
Section 9.7: Printing a parameter name 50
Section 9.8: Applied to qualified identifiers 50
Chapter 10: Verbatim Strings 51
Section 10.1: Interpolated Verbatim Strings 51
Section 10.2: Escaping Double Quotes 51
Section 10.3: Verbatim strings instruct the compiler to not use character escapes 51
Section 10.4: Multiline Strings 52
Chapter 11: Common String Operations 53
Section 11.1: Formatting a string 53
Section 11.2: Correctly reversing a string 53
Section 11.3: Padding a string to a fixed length 54
Section 11.4: Getting x characters from the right side of a string 55
Section 11.5: Checking for empty String using String.IsNullOrEmpty() and String.IsNullOrWhiteSpace() 56
Section 11.6: Trimming Unwanted Characters O the Start and/or End of Strings 57
Section 11.7: Convert Decimal Number to Binary,Octal and Hexadecimal Format 57
Section 11.8: Construct a string from Array 57
Section 11.9: Formatting using ToString 58
Section 11.10: Splitting a String by another string 59
Section 11.11: Splitting a String by specific character 59
Section 11.12: Getting Substrings of a given string 59
Section 11.13: Determine whether a string begins with a given sequence 59
Section 11.14: Getting a char at specific index and enumerating the string 59
Section 11.15: Joining an array of strings into a new one 60
Section 11.16: Replacing a string within a string 60
Section 11.17: Changing the case of characters within a String 60
Section 11.18: Concatenate an array of strings into a single string 61
Section 11.19: String Concatenation 61
Chapter 12: String.Format 62
Section 12.1: Since C# 6.0 62
Section 12.2: Places where String.Format is 'embedded' in the framework 62
Section 12.3: Create a custom format provider 62
Section 12.4: Date Formatting 63
Section 12.5: Currency Formatting 64
Section 12.6: Using custom number format 65
Section 12.7: Align left/ right, pad with spaces 65
Section 12.8: Numeric formats 66
Section 12.9: ToString() 66
Section 12.10: Escaping curly brackets inside a String.Format() expression 67
Section 12.11: Relationship with ToString() 67
Chapter 13: String Concatenate 68
Section 13.1: + Operator 68
Section 13.2: Concatenate strings using System.Text.StringBuilder 68
Section 13.3: Concat string array elements using String.Join 68
Section 13.4: Concatenation of two strings using $ 69
Chapter 14: String Manipulation 70
Section 14.1: Replacing a string within a string 70
Section 14.2: Finding a string within a string 70
Section 14.3: Removing (Trimming) white-space from a string 70
Section 14.4: Splitting a string using a delimiter 71
Section 14.5: Concatenate an array of strings into a single string 71
Section 14.6: String Concatenation 71
Section 14.7: Changing the case of characters within a String 71
Chapter 15: String Interpolation 73
Section 15.1: Format dates in strings 73
Section 15.2: Padding the output 73
Section 15.3: Expressions 74
Section 15.4: Formatting numbers in strings 74
Section 15.5: Simple Usage 75
Chapter 16: String Escape Sequences 76
Section 16.1: Escaping special symbols in string literals 76
Section 16.2: Unicode character escape sequences 76
Section 16.3: Escaping special symbols in character literals 76
Section 16.4: Using escape sequences in identifiers 76
Section 16.5: Unrecognized escape sequences produce compile-time errors 77
Chapter 17: StringBuilder 78
Section 17.1: What a StringBuilder is and when to use one 78
Section 17.2: Use StringBuilder to create string from a large number of records 79
Chapter 18: Regex Parsing 80
Section 18.1: Single match 80
Section 18.2: Multiple matches 80
Chapter 19: DateTime Methods 81
Section 19.1: DateTime Formatting 81
Section 19.2: DateTime.AddDays(Double) 82
Section 19.3: DateTime.AddHours(Double) 82
Section 19.4: DateTime.Parse(String) 82
Section 19.5: DateTime.TryParse(String, DateTime) 82
Section 19.6: DateTime.AddMilliseconds(Double) 83
Section 19.7: DateTime.Compare(DateTime t1, DateTime t2 ) 83
Section 19.8: DateTime.DaysInMonth(Int32, Int32) 83
Section 19.9: DateTime.AddYears(Int32) 84
Section 19.10: Pure functions warning when dealing with DateTime 84
Section 19.11: DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 84
Section 19.12: DateTime.Add(TimeSpan) 86
Section 19.13: Parse and TryParse with culture info 86
Section 19.14: DateTime as initializer in for-loop 87
Section 19.15: DateTime.ParseExact(String, String, IFormatProvider) 87
Section 19.16: DateTime ToString, ToShortDateString, ToLongDateString and ToString formatted 88
Section 19.17: Current Date 88
Chapter 20: Arrays 89
Section 20.1: Declaring an array 89
Section 20.2: Initializing an array filled with a repeated non-default value 89
Section 20.3: Copying arrays 90
Section 20.4: Comparing arrays for equality 90
Section 20.5: Multi-dimensional arrays 91
Section 20.6: Getting and setting array values 91
Section 20.7: Iterate over an array 91
Section 20.8: Creating an array of sequential numbers 92
Section 20.9: Jagged arrays 92
Section 20.10: Array covariance 94
Section 20.11: Arrays as IEnumerable<> instances 94
Section 20.12: Checking if one array contains another array 94
Chapter 21: O(n) Algorithm for circular rotation of an array 96
Section 21.1: Example of a generic method that rotates an array by a given shift 96
Chapter 22: Enum 98
Section 22.1: Enum basics 98
Section 22.2: Enum as flags 99
Section 22.3: Using << notation for flags 101
Section 22.4: Test flags-style enum values with bitwise logic 101
Section 22.5: Add and remove values from flagged enum 102
Section 22.6: Enum to string and back 102
Section 22.7: Enums can have unexpected values 103
Section 22.8: Default value for enum == ZERO 103
Section 22.9: Adding additional description information to an enum value 104
Section 22.10: Get all the members values of an enum 105
Section 22.11: Bitwise Manipulation using enums 105
Chapter 23: Tuples 106
Section 23.1: Accessing tuple elements 106
Section 23.2: Creating tuples 106
Section 23.3: Comparing and sorting Tuples 106
Section 23.4: Return multiple values from a method 107
Chapter 24: Guid 108
Section 24.1: Getting the string representation of a Guid 108
Section 24.2: Creating a Guid 108
Section 24.3: Declaring a nullable GUID 108
Chapter 25: BigInteger 110
Section 25.1: Calculate the First 1,000-Digit Fibonacci Number 110
Chapter 26: Collection Initializers 111
Section 26.1: Collection initializers 111
Section 26.2: C# 6 Index Initializers 111
Section 26.3: Collection initializers in custom classes 112
Section 26.4: Using collection initializer inside object initializer 113
Section 26.5: Collection Initializers with Parameter Arrays 114
Chapter 27: An overview of C# collections 115
Section 27.1: HashSet
115
Section 27.2: Dictionary 115
Section 27.3: SortedSet 116
Section 27.4: T[ ] (Array of T) 116
Section 27.5: List 117
Section 27.6: Stack 117
Section 27.7: LinkedList 117
Section 27.8: Queue 118
Chapter 28: Looping 119
Section 28.1: For Loop 119
Section 28.2: Do - While Loop 120
Section 28.3: Foreach Loop 120
Section 28.4: Looping styles 121
Section 28.5: Nested loops 122
Section 28.6: continue 122
Section 28.7: While loop 123
Section 28.8: break 123
Chapter 29: Iterators 125
Section 29.1: Creating Iterators Using Yield 125
Section 29.2: Simple Numeric Iterator Example 126
Chapter 30: IEnumerable 127
Section 30.1: IEnumerable with custom Enumerator 127
Section 30.2: IEnumerable 128
Chapter 31: Value type vs Reference type 129
Section 31.1: Passing by reference using ref keyword 129
Section 31.2: Changing values elsewhere 130
Section 31.3: ref vs out parameters 131
Section 31.4: Assignment 132
Section 31.5: Dierence with method parameters ref and out 132
Section 31.6: Passing by reference 133
Chapter 32: Built-in Types 134
Section 32.1: Conversion of boxed value types 134
Section 32.2: Comparisons with boxed value types 134
Section 32.3: Immutable reference type - string 134
Section 32.4: Value type - char 135
Section 32.5: Value type - short, int, long (signed 16 bit, 32 bit, 64 bit integers) 135
Section 32.6: Value type - ushort, uint, ulong (unsigned 16 bit, 32 bit, 64 bit integers) 135
Section 32.7: Value type - bool 136
Chapter 33: Aliases of built-in types 137
Section 33.1: Built-In Types Table 137
Chapter 34: Anonymous types 138
Section 34.1: Anonymous vs dynamic 138
Section 34.2: Creating an anonymous type 138
Section 34.3: Anonymous type equality 138
Section 34.4: Generic methods with anonymous types 139
Section 34.5: Instantiating generic types with anonymous types 139
Section 34.6: Implicitly typed arrays 139
Chapter 35: Dynamic type 141
Section 35.1: Creating a dynamic object with properties 141
Section 35.2: Creating a dynamic variable 141
Section 35.3: Returning dynamic 141
Section 35.4: Handling Specific Types Unknown at Compile Time 141
Chapter 36: Type Conversion 143
Section 36.1: Explicit Type Conversion 143
Section 36.2: MSDN implicit operator example 143
Chapter 37: Casting 145
Section 37.1: Checking compatibility without casting 145
Section 37.2: Cast an object to a base type 145
Section 37.3: Conversion Operators 145
Section 37.4: LINQ Casting operations 147
Section 37.5: Explicit Casting 147
Section 37.6: Safe Explicit Casting (`as` operator) 147
Section 37.7: Implicit Casting 148
Section 37.8: Explicit Numeric Conversions 148
Chapter 38: Nullable types 149
Section 38.1: Initialising a nullable 149
Section 38.2: Check if a Nullable has a value 149
Section 38.3: Get the value of a nullable type 149
Section 38.4: Getting a default value from a nullable 150
Section 38.5: Default value of nullable types is null 150
Section 38.6: Eective usage of underlying Nullable argument 151
Section 38.7: Check if a generic type parameter is a nullable type 152
Chapter 39: Constructors and Finalizers 153
Section 39.1: Static constructor 153
Section 39.2: Singleton constructor pattern 154
Section 39.3: Default Constructor 154
Section 39.4: Forcing a static constructor to be called 155
Section 39.5: Calling a constructor from another constructor 156
Section 39.6: Calling the base class constructor 156
Section 39.7: Finalizers on derived classes 157
Section 39.8: Exceptions in static constructors 157
Section 39.9: Constructor and Property Initialization 158
Section 39.10: Generic Static Constructors 160
Section 39.11: Calling virtual methods in constructor 160
Chapter 40: Access Modifiers 162
Section 40.1: Access Modifiers Diagrams 162
Section 40.2: public 163
Section 40.3: private 163
Section 40.4: protected internal 164
Section 40.5: internal 165
Section 40.6: protected 166
Chapter 41: Interfaces 167
Section 41.1: Implementing an interface 167
Section 41.2: Explicit interface implementation 167
Section 41.3: Interface Basics 169
Section 41.4: IComparable as an Example of Implementing an Interface 171
Section 41.5: Implementing multiple interfaces 172
Section 41.6: Why we use interfaces 172
Section 41.7: "Hiding" members with Explicit Implementation 173
Chapter 42: Static Classes 175
Section 42.1: Static Classes 175
Section 42.2: Static class lifetime 175
Section 42.3: Static keyword 176
Chapter 43: Singleton Implementation 177
Section 43.1: Statically Initialized Singleton 177
Section 43.2: Lazy, thread-safe Singleton (using Lazy) 177
Section 43.3: Lazy, thread-safe Singleton (using Double Checked Locking) 177
Section 43.4: Lazy, thread safe singleton (for .NET 3.5 or older, alternate implementation) 178
Chapter 44: Dependency Injection 180
Section 44.1: Dependency Injection C# and ASP.NET with Unity 180
Section 44.2: Dependency injection using MEF 182
Chapter 45: Partial class and methods 185
Section 45.1: Partial classes 185
Section 45.2: Partial classes inheriting from a base class 185
Section 45.3: Partial methods 186
Chapter 46: Object initializers 187
Section 46.1: Simple usage 187
Section 46.2: Usage with non-default constructors 187
Section 46.3: Usage with anonymous types 187
Chapter 47: Methods 189
Section 47.1: Calling a Method 189
Section 47.2: Anonymous method 189
Section 47.3: Declaring a Method 190
Section 47.4: Parameters and Arguments 190
Section 47.5: Return Types 190
Section 47.6: Default Parameters 191
Section 47.7: Method overloading 192
Section 47.8: Access rights 193
Chapter 48: Extension Methods 194
Section 48.1: Extension methods - overview 194
Section 48.2: Null checking 196
Section 48.3: Explicitly using an extension method 197
Section 48.4: Generic Extension Methods 197
Section 48.5: Extension methods can only see public (or internal) members of the extended class 199
Section 48.6: Extension methods for chaining 199
Section 48.7: Extension methods with Enumeration 200
Section 48.8: Extension methods dispatch based on static type 201
Section 48.9: Extension methods on Interfaces 202
Section 48.10: Extension methods in combination with interfaces 203
Section 48.11: Extension methods aren't supported by dynamic code 203
Section 48.12: Extensions and interfaces together enable DRY code and mixin-like functionality 204
Section 48.13: IList Extension Method Example: Comparing 2 Lists 205
Section 48.14: Extension methods as strongly typed wrappers 206
Section 48.15: Using Extension methods to create beautiful mapper classes 206
Section 48.16: Using Extension methods to build new collection types (e.g. DictList) 207
Section 48.17: Extension methods for handling special cases 208
Section 48.18: Using Extension methods with Static methods and Callbacks 209
Chapter 49: Named Arguments 211
Section 49.1: Argument order is not necessary 211
Section 49.2: Named arguments and optional parameters 211
Section 49.3: Named Arguments can make your code more clear 211
Chapter 50: Named and Optional Arguments 213
Section 50.1: Optional Arguments 213
Section 50.2: Named Arguments 214
Chapter 51: Data Annotation 217
Section 51.1: Data Annotation Basics 217
Section 51.2: Creating a custom validation attribute 217
Section 51.3: Manually Execute Validation Attributes 218
Section 51.4: Validation Attributes 218
Section 51.5: EditableAttribute (data modeling attribute) 220
Chapter 52: Keywords 222
Section 52.1: as 222
Section 52.2: goto 223
Section 52.3: volatile 224
Section 52.4: checked, unchecked 225
Section 52.5: virtual, override, new 226
Section 52.6: stackalloc 229
Section 52.7: break 230
Section 52.8: const 232
Section 52.9: async, await 233
Section 52.10: for 234
Section 52.11: abstract 235
Section 52.12: fixed 236
Section 52.13: default 237
Section 52.14: sealed 238
Section 52.15: is 238
Section 52.16: this 239
Section 52.17: readonly 240
Section 52.18: typeof 241
Section 52.19: foreach 241
Section 52.20: dynamic 242
Section 52.21: try, catch, finally, throw 243
Section 52.22: void 244
Section 52.23: namespace 244
Section 52.24: ref, out 245
Section 52.25: base 246
Section 52.26: float, double, decimal 248
Section 52.27: operator 249
Section 52.28: char 250
Section 52.29: params 250
Section 52.30: while 251
Section 52.31: null 253
Section 52.32: continue 254
Section 52.33: string 254
Section 52.34: return 255
Section 52.35: unsafe 255
Section 52.36: switch 257
Section 52.37: var 258
Section 52.38: when 259
Section 52.39: lock 260
Section 52.40: uint 261
Section 52.41: if, if.else, if. else if 261
Section 52.42: static 262
Section 52.43: internal 264
Section 52.44: using 265
Section 52.45: where 265
Section 52.46: int 267
Section 52.47: ulong 268
Section 52.48: true, false 268
Section 52.49: struct 268
Section 52.50: extern 269
Section 52.51: bool 270
Section 52.52: interface 270
Section 52.53: delegate 271
Section 52.54: unchecked 271
Section 52.55: ushort 272
Section 52.56: sizeof 272
Section 52.57: in 272
Section 52.58: implicit 273
Section 52.59: do 273
Section 52.60: long 274
Section 52.61: enum 274
Section 52.62: partial 275
Section 52.63: event 276
Section 52.64: sbyte 277
Chapter 53: Object Oriented Programming In C# 278
Section 53.1: Classes: 278
Chapter 54: Recursion 279
Section 54.1: Recursion in plain English 279
Section 54.2: Fibonacci Sequence 279
Section 54.3: PowerOf calculation 280
Section 54.4: Recursively describe an object structure 280
Section 54.5: Using Recursion to Get Directory Tree 281
Section 54.6: Factorial calculation 284
Chapter 55: Naming Conventions 285
Section 55.1: Capitalization conventions 285
Section 55.2: Enums 286
Section 55.3: Interfaces 286
Section 55.4: Exceptions 286
Section 55.5: Private fields 287
Section 55.6: Namespaces 287
Chapter 56: XML Documentation Comments 288
Section 56.1: Simple method annotation 288
Section 56.2: Generating XML from documentation comments 288
Section 56.3: Method documentation comment with param and returns elements 290
Section 56.4: Interface and class documentation comments 290
Section 56.5: Referencing another class in documentation 291
Chapter 57: Comments and regions 292
Section 57.1: Comments 292
Section 57.2: Regions 292
Section 57.3: Documentation comments 293
Chapter 58: Inheritance 295
Section 58.1: Inheritance. Constructors' calls sequence 295
Section 58.2: Inheriting from a base class 297
Section 58.3: Inheriting from a class and implementing an interface 298
Section 58.4: Inheriting from a class and implementing multiple interfaces 298
Section 58.5: Constructors In A Subclass 299
Section 58.6: Inheritance Anti-patterns 299
Section 58.7: Extending an abstract base class 300
Section 58.8: Testing and navigating inheritance 301
Section 58.9: Inheriting methods 301
Section 58.10: Base class with recursive type specification 302
Chapter 59: Generics 305
Section 59.1: Implicit type inference (methods) 305
Section 59.2: Type inference (classes) 306
Section 59.3: Using generic method with an interface as a constraint type 306
Section 59.4: Type constraints (new-keyword) 307
Section 59.5: Type constraints (classes and interfaces) 308
Section 59.6: Checking equality of generic values 309
Section 59.7: Reflecting on type parameters 310
Section 59.8: Covariance 310
Section 59.9: Contravariance 311
Section 59.10: Invariance 312
Section 59.11: Variant interfaces 312
Section 59.12: Variant delegates 313
Section 59.13: Variant types as parameters and return values 314
Section 59.14: Type Parameters (Interfaces) 314
Section 59.15: Type constraints (class and struct) 315
Section 59.16: Explicit type parameters 315
Section 59.17: Type Parameters (Classes) 315
Section 59.18: Type Parameters (Methods) 316
Section 59.19: Generic type casting 316
Section 59.20: Configuration reader with generic type casting 317
Chapter 60: Using Statement 319
Section 60.1: Using Statement Basics 319
Section 60.2: Gotcha: returning the resource which you are disposing 320
Section 60.3: Multiple using statements with one block 321
Section 60.4: Gotcha: Exception in Dispose method masking other errors in Using blocks 322
Section 60.5: Using statements are null-safe 322
Section 60.6: Using Dispose Syntax to define custom scope 322
Section 60.7: Using Statements and Database Connections 323
Section 60.8: Executing code in constraint context 325
Chapter 61: Using Directive 326
Section 61.1: Associate an Alias to Resolve Conflicts 326
Section 61.2: Using alias directives 326
Section 61.3: Access Static Members of a Class 326
Section 61.4: Basic Usage 327
Section 61.5: Reference a Namespace 327
Section 61.6: Associate an Alias with a Namespace 327
Chapter 62: IDisposable interface 329
Section 62.1: In a class that contains only managed resources 329
Section 62.2: In a class with managed and unmanaged resources 329
Section 62.3: IDisposable, Dispose 330
Section 62.4: using keyword 330
Section 62.5: In an inherited class with managed resources 331
Chapter 63: Reflection 332
Section 63.1: Get the members of a type 332
Section 63.2: Get a method and invoke it 332
Section 63.3: Creating an instance of a Type 333
Section 63.4: Get a Strongly-Typed Delegate to a Method or Property via Reflection 336
Section 63.5: Get a generic method and invoke it 337
Section 63.6: Get a System.Type 338
Section 63.7: Getting and setting properties 338
Section 63.8: Create an instance of a Generic Type and invoke it's method 338
Section 63.9: Custom Attributes 339
Section 63.10: Instantiating classes that implement an interface (e.g. plugin activation) 340
Section 63.11: Get a Type by name with namespace 340
Section 63.12: Determining generic arguments of instances of generic types 341
Section 63.13: Looping through all the properties of a class 342
Chapter 64: IQueryable interface 343
Section 64.1: Translating a LINQ query to a SQL query 343
Chapter 65: Linq to Objects 344
Section 65.1: Using LINQ to Objects in C# 344
Chapter 66: LINQ Queries 348
Section 66.1: Chaining methods 348
Section 66.2: First, FirstOrDefault, Last, LastOrDefault, Single, and SingleOrDefault 349
Section 66.3: Except 352
Section 66.4: SelectMany 354
Section 66.5: Any 355
Section 66.6: JOINS 355
Section 66.7: Skip and Take 358
Section 66.8: Defining a variable inside a Linq query (let keyword) 358
Section 66.9: Zip 359
Section 66.10: Range and Repeat 359
Section 66.11: Basics 360
Section 66.12: All 360
Section 66.13: Aggregate 361
Section 66.14: Distinct 362
Section 66.15: SelectMany: Flattening a sequence of sequences 362
Section 66.16: GroupBy 364
Section 66.17: Query collection by type / cast elements to type 365
Section 66.18: Enumerating the Enumerable 366
Section 66.19: Using Range with various Linq methods 367
Section 66.20: Where 368
Section 66.21: Using SelectMany instead of nested loops 368
Section 66.22: Contains 368
Section 66.23: Joining multiple sequences 370
Section 66.24: Joining on multiple keys 372
Section 66.25: ToLookup 372
Section 66.26: SkipWhile 372
Section 66.27: Query Ordering - OrderBy() ThenBy() OrderByDescending() ThenByDescending() 373
Section 66.28: Sum 374
Section 66.29: GroupBy one or multiple fields 374
Section 66.30: OrderBy 375
Section 66.31: Any and First(OrDefault) - best practice 376
Section 66.32: GroupBy Sum and Count 376
Section 66.33: SequenceEqual 377
Section 66.34: ElementAt and ElementAtOrDefault 377
Section 66.35: DefaultIfEmpty 378
Section 66.36: ToDictionary 379
Section 66.37: Concat 380
Section 66.38: Build your own Linq operators for IEnumerable 380
Section 66.39: Select - Transforming elements 381
Section 66.40: OrderByDescending 382
Section 66.41: Union 382
Section 66.42: GroupJoin with outer range variable 383
Section 66.43: Linq Quantifiers 383
Section 66.44: TakeWhile 383
Section 66.45: Reverse 384
Section 66.46: Count and LongCount 385
Section 66.47: Incrementally building a query 385
Section 66.48: Select with Func selector - Use to get ranking of elements 387
Chapter 67: LINQ to XML 389
Section 67.1: Read XML using LINQ to XML 389
Chapter 68: Parallel LINQ (PLINQ) 391
Section 68.1: Simple example 391
Section 68.2: WithDegreeOfParallelism 391
Section 68.3: AsOrdered 391
Section 68.4: AsUnordered 391
Chapter 69: XmlDocument and the System.Xml namespace 392
Section 69.1: XmlDocument vs XDocument (Example and comparison) 392
Section 69.2: Reading from XML document 394
Section 69.3: Basic XML document interaction 395
Chapter 70: XDocument and the System.Xml.Linq namespace 396
Section 70.1: Generate an XML document 396
Section 70.2: Generate an XML document using fluent syntax 396
Section 70.3: Modify XML File 397
Chapter 71: C# 7.0 Features 399
Section 71.1: Language support for Tuples 399
Section 71.2: Local functions 403
Section 71.3: out var declaration 404
Section 71.4: Pattern Matching 405
Section 71.5: Digit separators 407
Section 71.6: Binary literals 407
Section 71.7: throw expressions 408
Section 71.8: Extended expression bodied members list 409
Section 71.9: ref return and ref local 410
Section 71.10: ValueTask 411
Chapter 72: C# 6.0 Features 413
Section 72.1: Exception filters 413
Section 72.2: String interpolation 417
Section 72.3: Auto-property initializers 423
Section 72.4: Null propagation 426
Section 72.5: Expression-bodied function members 429
Section 72.6: Operator nameof 431
Section 72.7: Using static type 433
Section 72.8: Index initializers 433
Section 72.9: Improved overload resolution 435
Section 72.10: Await in catch and finally 436
Section 72.11: Minor changes and bugfixes 437
Section 72.12: Using an extension method for collection initialization 437
Section 72.13: Disable Warnings Enhancements 438
Chapter 73: C# 5.0 Features 440
Section 73.1: Async & Await 440
Section 73.2: Caller Information Attributes 441
Chapter 74: C# 4.0 Features 442
Section 74.1: Optional parameters and named arguments 442
Section 74.2: Variance 443
Section 74.3: Dynamic member lookup 443
Section 74.4: Optional ref keyword when using COM 444
Chapter 75: C# 3.0 Features 445
Section 75.1: Implicitly typed variables (var) 445
Section 75.2: Language Integrated Queries (LINQ) 445
Section 75.3: Lambda expresions 446
Section 75.4: Anonymous types 446
Chapter 76: Exception Handling 448
Section 76.1: Creating Custom Exceptions 448
Section 76.2: Finally block 450
Section 76.3: Best Practices 451
Section 76.4: Exception Anti-patterns 453
Section 76.5: Basic Exception Handling 455
Section 76.6: Handling specific exception types 455
Section 76.7: Aggregate exceptions / multiple exceptions from one method 456
Section 76.8: Throwing an exception 457
Section 76.9: Unhandled and Thread Exception 457
Section 76.10: Implementing IErrorHandler for WCF Services 458
Section 76.11: Using the exception object 460
Section 76.12: Nesting of Exceptions & try catch blocks 462
Chapter 77: NullReferenceException 463
Section 77.1: NullReferenceException explained 463
Chapter 78: Handling FormatException when converting string to other types 464
Section 78.1: Converting string to integer 464
Chapter 79: Read & Understand Stacktraces 466
Section 79.1: Stack trace for a simple NullReferenceException in Windows Forms 466
Chapter 80: Diagnostics 468
Section 80.1: Redirecting log output with TraceListeners 468
Section 80.2: Debug.WriteLine 468
Chapter 81: Overflow 469
Section 81.1: Integer overflow 469
Section 81.2: Overflow during operation 469
Section 81.3: Ordering matters 469
Chapter 82: Getting Started: Json with C# 470
Section 82.1: Simple Json Example 470
Section 82.2: First things First: Library to work with Json 470
Section 82.3: C# Implementation 470
Section 82.4: Serialization 471
Section 82.5: Deserialization 471
Section 82.6: Serialization & De-Serialization Common Utilities function 471
Chapter 83: Using json.net 473
Section 83.1: Using JsonConverter on simple values 473
Section 83.2: Collect all fields of JSON object 475
Chapter 84: Lambda expressions 477
Section 84.1: Lambda Expressions as Shorthand for Delegate Initialization 477
Section 84.2: Lambda Expression as an Event Handler 477
Section 84.3: Lambda Expressions with Multiple Parameters or No Parameters 478
Section 84.4: Lambdas can be emitted both as `Func` and `Expression` 478
Section 84.5: Put Multiple Statements in a Statement Lambda 478
Section 84.6: Lambdas for both `Func` and `Action` 479
Section 84.7: Using lambda syntax to create a closure 479
Section 84.8: Passing a Lambda Expression as a Parameter to a Method 479
Section 84.9: Basic lambda expressions 479
Section 84.10: Basic lambda expressions with LINQ 480
Section 84.11: Lambda syntax with statement block body 480
Section 84.12: Lambda expressions with System.Linq.Expressions 480
Chapter 85: Generic Lambda Query Builder 481
Section 85.1: QueryFilter class 481
Section 85.2: GetExpression Method 481
Section 85.3: GetExpression Private overload 482
Section 85.4: ConstantExpression Method 483
Section 85.5: Usage 484
Chapter 86: Properties 485
Section 86.1: Auto-implemented properties 485
Section 86.2: Default Values for Properties 485
Section 86.3: Public Get 486
Section 86.4: Public Set 486
Section 86.5: Accessing Properties 486
Section 86.6: Read-only properties 488
Section 86.7: Various Properties in Context 488
Chapter 87: Initializing Properties 490
Section 87.1: C# 6.0: Initialize an Auto-Implemented Property 490
Section 87.2: Initializing Property with a Backing Field 490
Section 87.3: Property Initialization during object instantiation 490
Section 87.4: Initializing Property in Constructor 490
Chapter 88: INotifyPropertyChanged interface 491
Section 88.1: Implementing INotifyPropertyChanged in C# 6 491
Section 88.2: INotifyPropertyChanged With Generic Set Method 492
Chapter 89: Events 494
Section 89.1: Declaring and Raising Events 494
Section 89.2: Event Properties 495
Section 89.3: Creating cancelable event 496
Section 89.4: Standard Event Declaration 497
Section 89.5: Anonymous Event Handler Declaration 498
Section 89.6: Non-Standard Event Declaration 498
Section 89.7: Creating custom EventArgs containing additional data 499
Chapter 90: Expression Trees 501
Section 90.1: Create Expression Trees with a lambda expression 501
Section 90.2: Creating Expression Trees by Using the API 501
Section 90.3: Compiling Expression Trees 501
Section 90.4: Parsing Expression Trees 502
Section 90.5: Expression Tree Basic 502
Section 90.6: Examining the Structure of an Expression using Visitor 503
Section 90.7: Understanding the expressions API 503
Chapter 91: Overload Resolution 505
Section 91.1: Basic Overloading Example 505
Section 91.2: "params" is not expanded, unless necessary 505
Section 91.3: Passing null as one of the arguments 506
Chapter 92: BindingList 507
Section 92.1: Add item to list 507
Section 92.2: Avoiding N*2 iteration 507
Chapter 93: Preprocessor directives 508
Section 93.1: Conditional Expressions 508
Section 93.2: Other Compiler Instructions 508
Section 93.3: Defining and Undefining Symbols 509
Section 93.4: Region Blocks 510
Section 93.5: Disabling and Restoring Compiler Warnings 510
Section 93.6: Generating Compiler Warnings and Errors 510
Section 93.7: Custom Preprocessors at project level 511
Section 93.8: Using the Conditional attribute 511
Chapter 94: Structs 513
Section 94.1: Declaring a struct 513
Section 94.2: Struct usage 514
Section 94.3: Structs are copied on assignment 515
Section 94.4: Struct implementing interface 515
Chapter 95: Attributes 516
Section 95.1: Creating a custom attribute 516
Section 95.2: Reading an attribute 516
Section 95.3: Using an attribute 517
Section 95.4: DebuggerDisplay Attribute 517
Section 95.5: Caller info attributes 518
Section 95.6: Obsolete Attribute 519
Section 95.7: Reading an attribute from interface 519
Chapter 96: Delegates 521
Section 96.1: Declaring a delegate type 521
Section 96.2: The Func, Action and Predicate delegate types 522
Section 96.3: Combine Delegates (Multicast Delegates) 523
Section 96.4: Safe invoke multicast delegate 524
Section 96.5: Delegate Equality 525
Section 96.6: Underlying references of named method delegates 525
Section 96.7: Assigning a named method to a delegate 526
Section 96.8: Assigning to a delegate by lambda 527
Section 96.9: Encapsulating transformations in funcs 527
Section 96.10: Passing delegates as parameters 527
Section 96.11: Closure inside a delegate 528
Chapter 97: File and Stream I/O 529
Section 97.1: Reading from a file using the System.IO.File class 529
Section 97.2: Lazily reading a file line-by-line via an IEnumerable 529
Section 97.3: Async write text to a file using StreamWriter 529
Section 97.4: Copy File 529
Section 97.5: Writing lines to a file using the System.IO.StreamWriter class 530
Section 97.6: Writing to a file using the System.IO.File class 530
Section 97.7: Create File 531
Section 97.8: Move File 531
Section 97.9: Delete File 532
Section 97.10: Files and Directories 532
Chapter 98: Networking 533
Section 98.1: Basic TCP Communication Client 533
Section 98.2: Download a file from a web server 533
Section 98.3: Async TCP Client 534
Section 98.4: Basic UDP Client 535
Chapter 99: Performing HTTP requests 536
Section 99.1: Creating and sending an HTTP POST request 536
Section 99.2: Creating and sending an HTTP GET request 536
Section 99.3: Error handling of specific HTTP response codes (such as 404 Not Found) 537
Section 99.4: Retrieve HTML for Web Page (Simple) 537
Section 99.5: Sending asynchronous HTTP POST request with JSON body 537
Chapter 100: Reading and writing .zip files 539
Section 100.1: Writing to a zip file 539
Section 100.2: Writing Zip Files in-memory 539
Section 100.3: Get files from a Zip file 539
Section 100.4: The following example shows how to open a zip archive and extract all .txt files to a folder 540
Chapter 101: FileSystemWatcher 541
Section 101.1: IsFileReady 541
Section 101.2: Basic FileWatcher 541
Chapter 102: Access network shared folder with username and password 543
Section 102.1: Code to access network shared file 543
Chapter 103: Asynchronous Socket 545
Section 103.1: Asynchronous Socket (Client / Server) example 545
Chapter 104: Action Filters 552
Section 104.1: Custom Action Filters 552
Chapter 105: Polymorphism 553
Section 105.1: Types of Polymorphism 553
Section 105.2: Another Polymorphism Example 554
Chapter 106: Immutability 557
Section 106.1: System.String class 557
Section 106.2: Strings and immutability 557
Chapter 107: Indexer 558
Section 107.1: A simple indexer 558
Section 107.2: Overloading the indexer to create a SparseArray 558
Section 107.3: Indexer with 2 arguments and interface 559
Chapter 108: Checked and Unchecked 560
Section 108.1: Checked and Unchecked 560
Section 108.2: Checked and Unchecked as a scope 560
Chapter 109: Stream 561
Section 109.1: Using Streams 561
Chapter 110: Timers 563
Section 110.1: Multithreaded Timers 563
Section 110.2: Creating an Instance of a Timer 564
Section 110.3: Assigning the "Tick" event handler to a Timer 565
Section 110.4: Example: Using a Timer to perform a simple countdown 565
Chapter 111: Stopwatches 567
Section 111.1: IsHighResolution 567
Section 111.2: Creating an Instance of a Stopwatch 567
Chapter 112: Threading 569
Section 112.1: Avoiding Reading and Writing Data Simultaneously 569
Section 112.2: Creating and Starting a Second Thread 570
Section 112.3: Parallel.ForEach Loop 570
Section 112.4: Deadlocks (hold resource and wait) 571
Section 112.5: Simple Complete Threading Demo 573
Section 112.6: Creating One Thread Per Processor 574
Section 112.7: Simple Complete Threading Demo using Tasks 574
Section 112.8: Deadlocks (two threads waiting on each other) 575
Section 112.9: Explicit Task Parallism 576
Section 112.10: Implicit Task Parallelism 576
Section 112.11: Starting a thread with parameters 577
Chapter 113: Async/await, Backgroundworker, Task and Thread Examples 578
Section 113.1: ASP.NET Configure Await 578
Section 113.2: Task "run and forget" extension 580
Section 113.3: Async/await 580
Section 113.4: BackgroundWorker 581
Section 113.5: Task 582
Section 113.6: Thread 583
Chapter 114: Async-Await 584
Section 114.1: Await operator and async keyword 584
Section 114.2: Concurrent calls 585
Section 114.3: Try/Catch/Finally 586
Section 114.4: Returning a Task without await 587
Section 114.5: Async/await will only improve performance if it allows the machine to do additional work 587
Section 114.6: Web.config setup to target 4.5 for correct async behaviour 588
Section 114.7: Simple consecutive calls 588
Section 114.8: Blocking on async code can cause deadlocks 589
Chapter 115: Synchronization Context in Async-Await 591
Section 115.1: Pseudocode for async/await keywords 591
Section 115.2: Disabling synchronization context 591
Section 115.3: Why SynchronizationContext is so important? 592
Chapter 116: BackgroundWorker 593
Section 116.1: Using a BackgroundWorker to complete a task 593
Section 116.2: Assigning Event Handlers to a BackgroundWorker 594
Section 116.3: Creating a new BackgroundWorker instance 595
Section 116.4: Assigning Properties to a BackgroundWorker 595
Chapter 117: Task Parallel Library 596
Section 117.1: Parallel.ForEach 596
Section 117.2: Parallel.For 596
Section 117.3: Parallel.Invoke 597
Chapter 118: Making a variable thread safe 598
Section 118.1: Controlling access to a variable in a Parallel.For loop 598
Chapter 119: Lock Statement 599
Section 119.1: Throwing exception in a lock statement 599
Section 119.2: Simple usage 599
Section 119.3: Return in a lock statement 600
Section 119.4: Anti-Patterns and gotchas 600
Section 119.5: Using instances of Object for lock 604
Chapter 120: Yield Keyword 605
Section 120.1: Simple Usage 605
Section 120.2: Correctly checking arguments 605
Section 120.3: Early Termination 606
Section 120.4: More Pertinent Usage 607
Section 120.5: Lazy Evaluation 608
Section 120.6: Try.finally 609
Section 120.7: Eager evaluation 610
Section 120.8: Using yield to create an IEnumerator when implementing IEnumerable 610
Section 120.9: Lazy Evaluation Example: Fibonacci Numbers 611
Section 120.10: The dierence between break and yield break 612
Section 120.11: Return another Enumerable within a method returning Enumerable 613
Chapter 121: Task Parallel Library (TPL) Dataflow Constructs 614
Section 121.1: ActionBlock 614
Section 121.2: BroadcastBlock 614
Section 121.3: BuerBlock 615
Section 121.4: JoinBlock 616
Section 121.5: WriteOnceBlock 617
Section 121.6: BatchedJoinBlock 618
Section 121.7: TransformBlock 619
Section 121.8: TransformManyBlock 619
Section 121.9: BatchBlock 620
Chapter 122: Functional Programming 622
Section 122.1: Func and Action 622
Section 122.2: Higher-Order Functions 622
Section 122.3: Avoid Null References 622
Section 122.4: Immutability 624
Section 122.5: Immutable collections 625
Chapter 123: Func delegates 626
Section 123.1: Without parameters 626
Section 123.2: With multiple variables 626
Section 123.3: Lambda & anonymous methods 627
Section 123.4: Covariant & Contravariant Type Parameters 627
Chapter 124: Function with multiple return values 629
Section 124.1: "anonymous object" + "dynamic keyword" solution 629
Section 124.2: Tuple solution 629
Section 124.3: Ref and Out Parameters 629
Chapter 125: Binary Serialization 631
Section 125.1: Controlling serialization behavior with attributes 631
Section 125.2: Serialization Binder 631
Section 125.3: Some gotchas in backward compatibility 633
Section 125.4: Making an object serializable 635
Section 125.5: Serialization surrogates (Implementing ISerializationSurrogate) 636
Section 125.6: Adding more control by implementing ISerializable 638
Chapter 126: ICloneable 640
Section 126.1: Implementing ICloneable in a class 640
Section 126.2: Implementing ICloneable in a struct 640
Chapter 127: IComparable 642
Section 127.1: Sort versions 642
Chapter 128: Accessing Databases 644
Section 128.1: Connection Strings 644
Section 128.2: Entity Framework Connections 644
Section 128.3: ADO.NET Connections 645
Chapter 129: Using SQLite in C# 648
Section 129.1: Creating simple CRUD using SQLite in C# 648
Section 129.2: Executing Query 651
Chapter 130: Caching 653
Section 130.1: MemoryCache 653
Chapter 131: Code Contracts 654
Section 131.1: Postconditions 654
Section 131.2: Invariants 654
Section 131.3: Defining Contracts on Interface 655
Section 131.4: Preconditions 656
Chapter 132: Code Contracts and Assertions 658
Section 132.1: Assertions to check logic should always be true 658
Chapter 133: Structural Design Patterns 659
Section 133.1: Adapter Design Pattern 659
Chapter 134: Creational Design Patterns 663
Section 134.1: Singleton Pattern 663
Section 134.2: Factory Method pattern 664
Section 134.3: Abstract Factory Pattern 667
Section 134.4: Builder Pattern 669
Section 134.5: Prototype Pattern 673
Chapter 135: Implementing Decorator Design Pattern 676
Section 135.1: Simulating cafeteria 676
Chapter 136: Implementing Flyweight Design Pattern 678
Section 136.1: Implementing map in RPG game 678
Chapter 137: System.Management.Automation 681
Section 137.1: Invoke simple synchronous pipeline 681
Chapter 138: System.DirectoryServices.Protocols.LdapConnection 682
Section 138.1: Authenticated SSL LDAP connection, SSL cert does not match reverse DNS 682
Section 138.2: Super Simple anonymous LDAP 683
Chapter 139: C# Authentication handler 684
Section 139.1: Authentication handler 684
Chapter 140: Pointers 686
Section 140.1: Pointers for array access 686
Section 140.2: Pointer arithmetic 686
Section 140.3: The asterisk is part of the type 687
Section 140.4: void* 687
Section 140.5: Member access using -> 687
Section 140.6: Generic pointers 688
Chapter 141: Pointers & Unsafe Code 689
Section 141.1: Introduction to unsafe code 689
Section 141.2: Accessing Array Elements Using a Pointer 690
Section 141.3: Compiling Unsafe Code 690
Section 141.4: Retrieving the Data Value Using a Pointer 691
Section 141.5: Passing Pointers as Parameters to Methods 692
Chapter 142: How to use C# Structs to create a Union type (Similar to C Unions) 693
Section 142.1: C-Style Unions in C# 693
Section 142.2: Union Types in C# can also contain Struct fields 694
Chapter 143: Reactive Extensions (Rx) 696
Section 143.1: Observing TextChanged event on a TextBox 696
Section 143.2: Streaming Data from Database with Observable 696
Chapter 144: AssemblyInfo.cs Examples 697
Section 144.1: Global and local AssemblyInfo 697
Section 144.2: [AssemblyVersion] 697
Section 144.3: Automated versioning 698
Section 144.4: Common fields 698
Section 144.5: [AssemblyTitle] 698
Section 144.6: [AssemblyProduct] 698
Section 144.7: [InternalsVisibleTo] 698
Section 144.8: [AssemblyConfiguration] 699
Section 144.9: [AssemblyKeyFile] 699
Section 144.10: Reading Assembly Attributes 699
Chapter 145: Creating a Console Application using a Plain-Text Editor and the C#
Compiler (csc.exe) 701
Section 145.1: Creating a Console application using a Plain-Text Editor and the C# Compiler 701
Chapter 146: CLSCompliantAttribute 703
Section 146.1: Access Modifier to which CLS rules apply 703
Section 146.2: Violation of CLS rule: Unsigned types / sbyte 703
Section 146.3: Violation of CLS rule: Same naming 704
Section 146.4: Violation of CLS rule: Identifier _ 705
Section 146.5: Violation of CLS rule: Inherit from non CLSComplaint class 705
Chapter 147: ObservableCollection 706
Section 147.1: Initialize ObservableCollection 706
Chapter 148: Hash Functions 707
Section 148.1: PBKDF2 for Password Hashing 707
Section 148.2: Complete Password Hashing Solution using Pbkdf2 707
Section 148.3: MD5 711
Section 148.4: SHA1 711
Section 148.5: SHA256 712
Section 148.6: SHA384 712
Section 148.7: SHA512 713
Chapter 149: Generating Random Numbers in C# 714
Section 149.1: Generate a random int 714
Section 149.2: Generate a random int in a given range 714
Section 149.3: Generating the same sequence of random numbers over and over again 714
Section 149.4: Create multiple random class with dierent seeds simultaneously 715
Section 149.5: Generate a Random double 715
Section 149.6: Generate a random character 715
Section 149.7: Generate a number that is a percentage of a max value 715
Chapter 150: Cryptography (System.Security.Cryptography) 717
Section 150.1: Modern Examples of Symmetric Authenticated Encryption of a string 717
Section 150.2: Introduction to Symmetric and Asymmetric Encryption 728
Section 150.3: Simple Symmetric File Encryption 729
Section 150.4: Cryptographically Secure Random Data 730
Section 150.5: Password Hashing 731
Section 150.6: Fast Asymmetric File Encryption 731
Chapter 151: ASP.NET Identity 736
Section 151.1: How to implement password reset token in asp.net identity using user manager 736
Chapter 152: Unsafe Code in .NET 739
Section 152.1: Using unsafe with arrays 739
Section 152.2: Using unsafe with strings 739
Section 152.3: Unsafe Array Index 740
Chapter 153: C# Script 741
Section 153.1: Simple code evaluation 741
Chapter 154: Runtime Compile 742
Section 154.1: RoslynScript 742
Section 154.2: CSharpCodeProvider 742
Chapter 155: Interoperability 743
Section 155.1: Import function from unmanaged C++ DLL 743
Section 155.2: Calling conventions 743
Section 155.3: C++ name mangling 744
Section 155.4: Dynamic loading and unloading of unmanaged DLLs 744
Section 155.5: Reading structures with Marshal 745
Section 155.6: Dealing with Win32 Errors 746
Section 155.7: Pinned Object 747
Section 155.8: Simple code to expose class for com 748
Chapter 156: .NET Compiler Platform (Roslyn) 750
Section 156.1: Semantic model 750
Section 156.2: Syntax tree 750
Section 156.3: Create workspace from MSBuild project 751
Chapter 157: ILGenerator 752
Section 157.1: Creates a DynamicAssembly that contains a UnixTimestamp helper method 752
Section 157.2: Create method override 753
Chapter 158: T4 Code Generation 755
Section 158.1: Runtime Code Generation 755
Chapter 159: Creating Own MessageBox in Windows Form Application 756
Section 159.1: How to use own created MessageBox control in another Windows Form application 756
Section 159.2: Creating Own MessageBox Control 756
Chapter 160: Including Font Resources 759
Section 160.1: Instantiate 'Fontfamily' from Resources 759
Section 160.2: Integration method 759
Section 160.3: Usage with a 'Button' 759
Chapter 161: Import Google Contacts 761
Section 161.1: Requirements 761
Section 161.2: Source code in the controller 761
Section 161.3: Source code in the view 764
Chapter 162: Garbage Collector in .Net 765
Section 162.1: Weak References 765
Section 162.2: Large Object Heap compaction 766
Chapter 163: Microsoft.Exchange.WebServices 767
Section 163.1: Retrieve Specified User's Out of Oce Settings 767
Section 163.2: Update Specific User's Out of Oce Settings 767
Chapter 164: Windows Communication Foundation 769
Section 164.1: Getting started sample 769
Credits 771
You may also like 785
[/spoiler]