Pular para conteúdo

Estruturas exóticas na programação c♯

A plataforma .net é fundamentalmente arquitetada para um modelo de programação orientada a objetos. Aspectos como herança, polimorfismo, interfaces, generics estão bem documentados e são bem desenvolvidos nesta arquitetura. Existe, entretanto, diversas estruturas de programação que não são do domínio da Orientação Objeto. Os casos descritos abaixo explicam alguns destas estruturas:

tipos primitivos

Tipos primitivos como inteiros, lógicos, caractere, data, hora dentre outros são alias de suas respectivas implementações formais como classes.

Dito de outra forma:

public sealed class Teste01{

  public static void Main(string[] args){

    int valor = 1;
    System.Int32 valor1 = 0;

    bool testarIgualdade = valor1==valor;
    // Irá exibir -> true
  }
}

Repare-se que a utilização de primitivos e das suas contrapartes orientadas a objeto é intercambiável e essa mediação é feita pelo compilador sem necessidade de ações por parte do desenvolvedor.

interfaces

Interfaces em .net são uma palavra reservada na linguagem e um contrato que suporta a definição de métodos, eventos e properties. Mas não suporta fields. Interfaces suportam herança e generics, mas não polimorfismo. Também não é possível criar instância anônima ou explícita a partir de um tipo interface.

Interfaces são estruturas para definição e posterior implementação de contratos de funcionamento e a sua implementação pode ser realizada tanto em structs quanto em classes.

structs

!TODO

redefinição de operadores

!TODO

redeclaração de atributos e operações

!TODO

extension methods

Notação diamante

~== TODO ==~

yield

~== TODO ==~

Linq e live collections

  • É uma extensão funcional inspirada por especificações como OQL (exemplos)
  • https://learn.microsoft.com/en-us/dotnet/csharp/linq/
  • É um poderoso mecanismo de consultas a objetos. Pode ser utilizado sobre collections, NoSQL records, SGBD records, File System Resources, Xml Entities, Byte Streams
  • Não está diretamente relacionado ao acesso de dados em fontes externas (out-of-process). É fundamentalmente construído para operações sobre objetos carregados na memória (objetos In-Process. Não confundir com In-Memory Database).
  • IQueryable é a principal interface habilitadora de utilização de recursos
  • Pode ser utilizado através de conjuntos de API específicas estruturadas na forma de Fluent Programming
  • Pode ser utilizado através de uma sintaxe não imperativa suportadas pelos compiladores para .net (C#, VB.net, F#) e se assemelha à sintaxe da linguagem SQL
  • É arquiteturalmente construída para permitir execução tardia
  • É . Esse é um aspecto que deve ser de permanente atenção, uma vez que:
  • Tem impacto direto sobre o montante de memória utilizado pela aplicação.
  • A estrutura de execução tardia, associado a rotinas de aquisição de registros externos (cascade loading, entity graph hidratation, lazy loading) pode gerar processamento de expressivo volume de dados sem que o programador se aperceba do que está acontecendo. (exemplos)

~== TODO ==~

Expression Linq e emissão dinâmica de código

async/await

~== TODO ==~

lock

~== TODO ==~

using

~== TODO ==~

global namespaces

~== TODO ==~

otimizações para execução de código c/c++ - PInvoke, unsecure, fixed

~== TODO ==~

Expression Linq

~== TODO ==~


https://www.csharptutorial.net/csharp-linq/linq-intersect/#:~:text=The%20Intersect()%20method%20uses,if%20they%20are%20primitive%20types. https://www.learnentityframeworkcore.com/configuration/fluent-api/ignore-method#:~:text=EF%20Core%20Ignore&text=One%20belongs%20to%20the%20ModelBuilder,exclude%20individual%20properties%20from%20mapping.

https://www.learnrazorpages.com/

https://www.learnblazor.com/

https://shipilev.net/blog/2014/exceptional-performance/