در مسیر یک حرفه، ابزارهای زیادی را جمع آوری میکنیم. این ابزارها چه مفاهیم، تکنیک ها، الگوها یا کدهای قابل استفاده مجدد باشند، به ما کمک میکنند تا ما کارمان را انجام دهیم. هر چه بیشتر جمع کنیم، بهتر است؛ زیرا مسائل بسیار زیادی برای حل و برنامههای زیادی برای ساختن داریم. کتاب C# Cookbook،با ارائه انواع دستور العملها به مجموعه جعبه ابزار شما اضافه میکند.
چیزها در طول زمان تغییر میکنند، از جمله زبانهای برنامه نویسی. در زمان نگارش این کتاب، زبان برنامه نویسی سی شارپ بیش از 20 سال عمر دارد و توسعه نرم افزار در طول عمر آن تغییر کرده است. دستور العملهای زیادی وجود دارند که میتوان نوشت. این کتاب تکامل سی شارپ را در طول زمان و این واقعیت که کدهای سی شارپ مدرن باعث بهرهوری بیشتر ما میشوند را تصدیق میکند.
حتی اگر با نحو سی شارپ آشنایی داشته باشید، دانستن اینکه چگونه ویژگیهای مختلف زبان را با هم ترکیب کنید، یک مهارت حیاتی در هنگام ساخت برنامهها است. کتاب C# Cookbook: Modern Recipes for Professional Developers (کتاب آشپزی سی شارپ: دستور العملهای مدرن برای توسعه دهندگان حرفه ای)، مملو از دستور العمل هایی است که به شما کمک میکنند تا مسائل مربوط به کارهای برنامه نویسی #C را که احتمالاً با آنها روبرو میشوید حل کنید. شما تکنیکهای آزمایش شده و واقعی را یاد خواهید گرفت تا به شما در دستیابی به بهره وری بیشتر و بهبود کیفیت کدتان کمک کنند.
نویسنده و مشاور مستقل Joe Mayo، برخی از مهمترین روشهایی را که برای موفقیت بهعنوان یک توسعهدهنده سی شارپ نیاز دارید، به اشتراک میگذارد. هر بخش از این کتاب، جنبههای مفید زبان برنامه نویسی سی شارپ را شرح میدهد. این دستور العمل ها، حاصل سالها تجربه و مفاهیم اثبات شده ای برای حل مسائل دنیای واقعی با #C هستند.
مطالبی که در کتاب C# Cookbook: Modern Recipes for Professional Developers، یاد خواهید گرفت عبارتند از:
- یادگیری تکنیکهای جدید برای استفاده از جدیدترین قابلیتهای C# 9.0
- استفاده از الگوها برای حل طیف وسیعی از مسائل
- کار با دستور العمل هایی برای سناریوهای مهم کد نویسی با سی شارپ
- استفاده مجدد از کد هایی که مسائل متداول را حل میکنند
- افزایش دانش خودتان در برنامه نویسی سی شارپ
- بهبود کیفیت برنامه هایتان
Table of Contents:
- 1. Constructing Types and Apps
- 1.1. Managing Object End-of-Lifetime
- 1.2. Removing Explicit Dependencies
- 1.3. Delegating Object Creation to a Class
- 1.4. Delegating Object Creation to a Method
- 1.5. Designing Application Layers
- 1.6. Returning Multiple Values from a Method
- 1.7. Converting from Legacy to Strongly Typed Classes
- 1.8. Making Classes Adapt to Your Interface
- 1.9. Designing a Custom Exception
- 1.10. Constructing Objects with Complex Configuration
- 2. Coding Algorithms
- 2.1. Processing Strings Efficiently
- 2.2. Simplifying Instance Cleanup
- 2.3. Keeping Logic Local
- 2.4. Operating on Multiple Classes the Same Way
- 2.5. Checking for Type Equality
- 2.6. Processing Data Hierarchies
- 2.7. Converting from/to Unix Time
- 2.8. Caching Frequently Requested Data
- 2.9. Delaying Type Instantiation
- 2.10. Parsing Data Files
- 3. Ensuring Quality
- 3.1. Writing a Unit Test
- 3.2. Versioning Interfaces Safely
- 3.3. Simplifying Parameter Validation
- 3.4. Protecting Code from NullReferenceException
- 3.5. Avoiding Magic Strings
- 3.6. Customizing Class String Representation
- 3.7. Rethrowing Exceptions
- 3.8. Managing Process Status
- 3.9. Building Resilient Network Connections
- 3.10. Measuring Performance
- 4. Querying with LINQ
- 4.1. Transforming Object Shape
- 4.2. Joining Data
- 4.3. Performing Left Joins
- 4.4. Grouping Data
- 4.5. Building Incremental Queries
- 4.6. Querying Distinct Objects
- 4.7. Simplifying Queries
- 4.8. Operating on Sets
- 4.9. Building a Query Filter with Expression Trees
- 4.10. Querying in Parallel
- 5. Implementing Dynamic and Reflection
- 5.1. Reading Attributes with Reflection
- 5.2. Accessing Type Members with Reflection
- 5.3. Instantiating Type Members with Reflection
- 5.4. Invoking Methods with Reflection
- 5.5. Replacing Reflection with Dynamic Code
- 5.6. Performing Interop with Office Apps
- 5.7. Creating an Inherently Dynamic Type
- 5.8. Adding and Removing Type Members Dynamically
- 5.9. Calling Python Code from C#
- 5.10. Calling C# Code from Python
- 6. Programming Asynchronously
- 6.1. Creating Async Console Applications
- 6.2. Reducing Memory Allocations for Async Return Values
- 6.3. Creating Async Iterators
- 6.4. Writing Safe Async Libraries
- 6.5. Updating Progress Asynchronously
- 6.6. Calling Synchronous Code from Async Code
- 6.7. Waiting for Parallel Tasks to Complete
- 6.8. Handling Parallel Tasks as They Complete
- 6.9. Cancelling Async Operations
- 6.10. Disposing of Async Resources
- 7. Manipulating Data
- 7.1. Generating Password Hashes
- 7.2. Encrypting and Decrypting Secrets
- 7.3. Hiding Development Secrets
- 7.4. Producing JSON
- 7.5. Consuming JSON
- 7.6. Working with JSON Data
- 7.7. Consuming XML
- 7.8. Producing XML
- 7.9. Encoding and Decoding URL Parameters
- 7.10. Flexible DateTime Reading
- 8. Matching with Patterns
- 8.1. Converting Instances Safely
- 8.2. Catching Filtered Exceptions
- 8.3. Simplifying Switch Assignments
- 8.4. Switching on Property Values
- 8.5. Switching on Tuples
- 8.6. Switching on Position
- 8.7. Switching on Value Ranges
- 8.8. Switching with Complex Conditions
- 8.9. Using Logical Conditions
- 8.10. Switching on Type
- 9. Examining Recent C# Language Highlights
- 9.1. Simplifying Application Startup
- 9.2. Reducing Instantiation Syntax
- 9.3. Initializing Immutable State
- 9.4. Creating Immutable Types
- 9.5. Simplifying Immutable Type Assignments
- 9.6. Designing for Record Reuse
- 9.7. Returning Different Method Override Types
- 9.8. Implementing Iterators as Extension Methods
- 9.9. Slicing Arrays
- 9.10. Initializing Entire Modules