C# Notes for Professionals book

    Amazing collection of free programming books

    收集中
    免費
    Amazing collection of free programming books

    The 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

    Book created for educational purposes and is not affiliated with group(s), company(s) nor Stack Overflow. All trademarks belong to their respective company owners

    https://goalkicker.com/

    章節目錄

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

    常見問答

    您可以透過手機、平板或是電腦登入 HiSKIO 平台,在【我的學習】>【我的書籍】頁面,選擇想看的電子書。

    猜你喜歡

    用戶評價

    | 收集中

    銷售方案