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.