C# Avançado para Desenvolvedores Senior
📋 Tópicos Essenciais
1. Generics e Constraints
- Generic classes, methods e interfaces
- Type constraints (where T : class, new(), etc.)
- Covariance e Contravariance
- Generic collections e performance
2. LINQ e Expression Trees
- LINQ to Objects, LINQ to SQL, LINQ to Entities
- Expression trees e compilação dinâmica
- Performance considerations em LINQ
- Custom extension methods
3. Reflection e Metaprogramação
- System.Reflection namespace
- Dynamic programming
- Code generation
- Attributes e custom attributes
4. Memory Management e Garbage Collection
- Stack vs Heap
- Garbage Collection generations
- IDisposable pattern
- Memory leaks e como evitá-los
- Using statements e pattern matching
5. Advanced Language Features
- Pattern matching (switch expressions)
- Records e value types
- Nullable reference types
- Top-level statements
- File-scoped namespaces
6. Concurrency e Parallelism
- Task Parallel Library (TPL)
- async/await patterns
- CancellationToken
- Parallel.ForEach vs Task.WhenAll
- Concurrent collections
7. Performance Optimization
- Boxing/unboxing
- String interning
- Struct vs Class performance
- Span<T> e Memory<T>
- ValueTask vs Task
8. Advanced OOP Concepts
- Inheritance vs Composition
- Interface segregation
- Abstract classes vs Interfaces
- Virtual methods e overriding
- Sealed classes
🎯 Exemplos Práticos
Generic Repository Pattern
csharp
public interface IRepository<T> where T : class, IEntity
{
Task<T> GetByIdAsync(int id);
Task<IEnumerable<T>> GetAllAsync();
Task AddAsync(T entity);
Task UpdateAsync(T entity);
Task DeleteAsync(int id);
}Expression Trees para Dynamic Queries
csharp
public static IQueryable<T> Where<T>(this IQueryable<T> source,
Expression<Func<T, bool>> predicate)
{
return source.Where(predicate);
}Memory-Efficient String Operations
csharp
public static string ConcatenateStrings(ReadOnlySpan<char> str1,
ReadOnlySpan<char> str2)
{
var result = new char[str1.Length + str2.Length];
str1.CopyTo(result);
str2.CopyTo(result.AsSpan(str1.Length));
return new string(result);
}📚 Recursos Adicionais
Livros Recomendados
- "C# in Depth" - Jon Skeet
- "Effective C#" - Bill Wagner
- "C# 9.0 in a Nutshell" - Joseph Albahari
Artigos e Blogs
- Microsoft C# Documentation
- Jon Skeet's Blog
- Eric Lippert's Blog
Ferramentas de Análise
- ReSharper
- SonarQube
- NDepend
- Visual Studio Profiler
⚠️ Pontos de Atenção
- Performance: Sempre meça antes de otimizar
- Memory: Monitore memory usage em aplicações críticas
- Threading: Cuidado com race conditions
- Reflection: Use com moderação, pode impactar performance
- Generics: Não abuse, mantenha o código legível
🔄 Evolução da Linguagem
C# 8.0+
- Nullable reference types
- Default interface methods
- Pattern matching enhancements
- Using declarations
C# 9.0+
- Records
- Init-only setters
- Top-level programs
- Pattern matching improvements
C# 10.0+
- File-scoped namespaces
- Global using directives
- Record structs
- Improved pattern matching
C# 11.0+
- Raw string literals
- Required members
- Generic attributes
- Pattern matching on spans
C# 12.0+
- Primary constructors
- Collection expressions
- Optional parameters in lambda expressions
- Inline arrays