Skip to content

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&lt;T&gt; where T : class, IEntity
{
    Task&lt;T&gt; GetByIdAsync(int id);
    Task&lt;IEnumerable&lt;T&gt;&gt; GetAllAsync();
    Task AddAsync(T entity);
    Task UpdateAsync(T entity);
    Task DeleteAsync(int id);
}

Expression Trees para Dynamic Queries

csharp
public static IQueryable&lt;T&gt; Where&lt;T&gt;(this IQueryable&lt;T&gt; source, 
    Expression&lt;Func&lt;T, bool&gt;&gt; predicate)
{
    return source.Where(predicate);
}

Memory-Efficient String Operations

csharp
public static string ConcatenateStrings(ReadOnlySpan&lt;char&gt; str1, 
    ReadOnlySpan&lt;char&gt; 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