Transcrições
1. Introdução avançada C #: Olá e bem-vindo ao meu curso e tópicos avançados em
C sustenido. Nesta série de vídeos, falaremos sobre os
detalhes do curso ou aula
anterior e continuaremos nossa jornada para dar uma olhada nos
conceitos avançados em C-Sharp. E este curso será
acompanhado de um repositório Git, que permitirá que você
aprofunde seu conhecimento,
reproduza os exemplos. Então, se você quiser aprender algo mais
complexo e em C sustenido, então este curso será ideal para você. Vejo você na próxima.
2. C # Avançou A Configuração: Olá e bem-vindo de volta. Neste pequeno vídeo,
vamos ver o ambiente no qual você pode
acompanhar os exemplos. Então, basicamente, você
tem duas opções. Uma é que você pode usar
com o Visual Studio apressado, você pode usar a 29ª versão
ou a versão 2022. Você pode baixá-lo do lado
oficial da Microsoft. E basicamente, o que
você precisa fazer é abrir o Instalador do Visual
Studio. E você pode clicar
em modificar. Aqui. Você precisa ter o desenvolvimento do dotnet
verificado e instalado. Depois de instalar isso, você poderá
acompanhar. Essa é uma opção. A outra opção que você pode usar é o Visual Studio Code. E o Visual Studio Code, você pode verificar as extensões
e verificar se há Dó sustenido. Isso é um pouco lento. Mas, basicamente, se você
instalar essa extensão, também ficará bem. Então isso é tudo que eu estou usando, basicamente uma máquina Windows. E é isso aí. Vejo você na próxima.
3. C# Advanced Lógica e Bitwise: Olá e bem-vindo de volta. Neste vídeo,
vamos nos segurar. Vamos falar sobre operadores
lógicos e bit a bit
e como você pode usá-los. Tão lógico e sábio. Tudo bem, vamos criá-lo. Então, basicamente, quando
falamos sobre
operadores lógicos e bit a bit e C-sharp, C-sharp suporta quatro
tipos principais de operações que são agrupadas com base
na ideia por trás de sua existência. Portanto, as categorias são aritmética,
relacional, lógica, atribuição
bit a bit e algumas operações
diversas. Os operadores aritméticos
geralmente realizam operações em dois números. Então você quer somar dois números, multiplicar, dividir e assim por diante. Os operadores relacionais são
usados para comparar ou Chegg, qualidade do
objeto ou objetos de entrada. E os operadores lógicos nos
permitem comparar um pouco de um determinado objeto e sempre
retorna um booleano como resorts. Portanto, seja verdadeiro ou falso, os operadores
bit a bit
executam a operação em bits
individuais e os
resultados são sempre bits. E os operadores de atribuição nos
permitem inicializar um objeto com um valor para
realizar uma operação específica. E há também outro conceito
importante que é a precedência do
operador, cujos operadores são
mais fortes do que os outros. E isso mostra a lógica de como expressões
complexas
são avaliadas. Então, se quisermos dar uma
olhada nos operadores lógicos, podemos fazer o seguinte. Vamos adicionar a
chave certa no final. E poderíamos dizer que
temos um booleano a, que é verdadeiro, e o
booleano b que é falso. Poderíamos usar a linha
certa do console para verificar se qual é o
valor de a e B. Ou podemos verificar
o valor de ohms ou linha
direita A ou B, e assim por diante. Se começarmos
ou
executarmos, podemos ver que a e B são
falsos e a ou B são verdadeiros. Então, quando estamos falando
sobre o operador final, temos que saber que
a condição é verdadeira quando ambas as entradas são verdadeiras, caso contrário, é falsa. A condição no caso
de operadores OR, a condição é verdadeira
quando um deles é verdadeiro, caso contrário, é falso. Então isso talvez seja sobre os operadores lógicos
e temos negação. E se você usar o ponto de
exclamação antes da variável, ela não obterá seu valor. Então nós definimos a s true, e aqui se negarmos
true, nós obtemos false. Agora, o que também podemos verificar
são os operadores bit a bit. Portanto, podemos ter um array int
que será seis. E vamos chamá-los de C
e D. E o D será 17. Então, se quisermos usar
os operadores bit a bit, o que podemos fazer é o seguinte. Então, poderíamos usar o
convert to string. Essa é uma função que
permite converter uma string. E poderíamos dizer que a ou B. E também podemos
usar os dois aqui. Então, deixe-me verificar. Então converta para a string a ou B. E se formos, espere, é C ou D. Tudo bem? Então, basicamente, quando
usamos o operador OR, age como se tivéssemos alguns
desses dois números. Portanto, temos o valor de 23. E poderíamos ter, Vamos verificar apenas
duas vezes a representação
desses números. Então, seis é 0000110. E nós temos o 17, que vai ser
zeros, zeros 010001. E também podemos usar
a operação AND aqui. Se o executarmos, obtemos esse valor. E você sabe, quando
olhamos para a operação final, obtemos uma. Se em ambos os casos
houve um,
caso contrário, obtemos 0. É por isso que obtemos zeros. Resultado porque nenhuma
dessas colunas se alinha
para obter o valor um. E podemos usar o operador AND
bit a bit. Então isso se parece com isso. E isso é menos sete. E poderíamos usar o operador OR
bit a C ou D. E isso nos dá 23. E tecnicamente é isso. Isso é o que eu queria
mostrar a vocês neste vídeo. Vejo você.
4. C# Avançado Const vs somente leitura: Olá e bem-vindo de volta. Neste vídeo,
falaremos
sobre a diferença
entre custo e somente leitura. C sustenido. C sustenido
facilita palavras-chave como somente concentrado ou até mesmo somente leitura
estática. E isso pode ser
confuso no início. Temos que conhecer as pequenas
diferenças entre eles. Portanto, a palavra-chave const nada mais
é do
que uma constante. Então, por exemplo, no custo
string, minha string. E podemos dizer que
isso é uma corda. E vamos mudar isso para
aspas duplas. Tudo bem? Agora está reclamando
que foi atribuído, nunca usado, mas tudo bem. Portanto, por padrão, se não dermos um valor
a essa string constante, ela nos dará um erro
porque ela deve ser inicializada. É por isso que está
sublinhado em vermelho. Mas depois de darmos valor, tudo ficará bem. E primeiro, quando definimos
a função constante, é basicamente uma
exceção a isso. Então, por exemplo, se você
tiver um teste de string estática, e poderíamos dizer que temos um
valor de teste de string constante e o retorno. Então, basicamente, temos que escrever a minha restrição e a linha certa do console. Isso vai usar
telefones com todas as três teclas. Para que possamos ter o
prompt, vamos executá-lo. O valor das
constantes não pode mudar durante a execução. Recentemente, a palavra-chave é
um modificador especial que tem muita semelhança com
a palavra-chave constante. E pode ser usado em campos, mas não em variáveis locais. Portanto, esses campos podem ser
inicializados quando declarados, quais são os construtores
do nosso objeto? E essa palavra-chave garante que a instância
ou propriedade da variável de um objeto não possa ser modificada
após a inicialização. E essa tentativa resultará
em uma exceção de isenção. E por que as constantes nele são inicializadas em tempo de compilação. A palavra-chave somente leitura
permite que as variáveis sejam inicializadas em tempo de
compilação ou em tempo de execução. Então, poderíamos ter a coluna pública de
string somente leitura de Mike para compilar nela. E podemos simplesmente
deixar como está. Então, por exemplo, poderíamos
ter como um aluno da turma. E essa classe pode ter a string
pública somente leitura, nome completo. E o nome público da cadeia de caracteres do
aluno. Nome completo é igual a nome. E se você for ao principal, podemos criar nosso aluno. Em seguida, ER e New Student, e use a linha direita do console para imprimir a
danielle para o nome. E agora podemos ver
a saída. Está lá. A principal diferença no nível
mais alto se quisermos
diferenciar a palavra-chave somente leitura
e const. Portanto, poderíamos dizer que a
diferença está em quando o valor da variável é conhecido durante o
ciclo de vida da aplicação. Para a palavra-chave read-only, o valor é conhecido
mais recente pelo tempo de execução, que para a palavra-chave const, o valor deve ser
conhecido pelo tempo de compilação. O comum dessas
palavras-chave é que ambas abrangem tipos de dados
imutáveis, significa que o valor não pode mudar ao longo
da vida útil do aplicativo. Para a palavra-chave const, a variável marcada
como tal é colocada
pelo compilador nos
metadados do assembly que define a constante e os metadados
e incorpora o valor ao código
da linguagem intermediária. após a inicialização. Isso significa que não
há alocação de memória além de quatro constantes durante o
tempo de execução sob o capô, o valor somente leitura não
é uma constante. Ele é armazenado na pilha do carregador, que é um
tipo memorial que não pode ser alocado até que o
tipo seja carregado. Então, tecnicamente, isso era
tudo que eu queria te dizer. Vejo você na próxima.
5. Âmbito e visibilidade avançadas C #: Olá e bem-vindo de volta. Neste vídeo,
falaremos sobre escopo e visibilidade. Portanto, esses são
conceitos muito cruciais ou basicamente cruciais para entender. E a maioria das linguagens de
programação por aí incorporam
esse conceito. O layout, a estrutura
na qual seus dados residem e eles mostram a direção em que
os dados podem fluir. Primeiro, vamos nos
aprofundar na visibilidade para verificar o escopo. Então, por exemplo, se
falamos sobre visibilidade, precisamos considerar
um método de classe e visibilidade
variável ou
pelo menos essas construções. No entanto, existem cinco tipos
diferentes de visibilidade. O primeiro é público, o segundo é protegido. O terceiro é interno. Forças protegidas internas,
e a quinta é privada. Público é o tipo de visibilidade mais
tolerante. O membro definido dessa forma
pode ser acessado de qualquer lugar. Os membros protegidos
especificados só podem ser alcançados a partir da mesma classe
ou de dentro da classe. Os membros internos especificados podem ser alcançados a partir
do mesmo projeto. E os membros
internos protegidos podem ser alcançados a partir do
mesmo projeto ou daquelas classes
que herdam da classe, seja de outro projeto. Os membros privados especificados podem ser acessados por outros
membros da mesma classe. Por padrão, as estruturas de classes são definidas para esse nível de visibilidade. Isso é o mais restritivo. Então, vamos ver a demonstração. No namespace, teremos a visibilidade da classe pública. E teremos a mensagem
pública, que é que estou visível
de qualquer lugar. E teremos a mensagem protegida do feixe de
cordas apenas do mesmo vidro. E mensagem de string interna somente de dentro
do mesmo projeto. E teremos a
mensagem privada, chatbot Dao. Então, teremos o vazio público. Mas mensagem arquitetada. Essa mensagem protegida
usará o console. Linha direita, mensagem B e linha de gravação de pontos do console. Mas se a mensagem, agora, o que podemos ter
é outra aula. Então, classe pública B, que vai herdar
da classe de visibilidade. E a estática pública. Vazio. Main vai fazer isso. Então, visibilidade, uma nova visibilidade. E uma visibilidade B será uma
visibilidade. Espera aí. O que gostaríamos de
fazer é ir em frente e usar os telefones ou
escrever uma mensagem em linha. Um ou um ponto. Escreva uma mensagem de linha
no console dot write
line aid at p0 message. E seja Goodall, fez Mensagem. Em seguida, os cones são lidos. Então, agora isso pode ser excluído. Devemos ter a linha certa e teremos a mensagem P. Temos a visibilidade dos olhos, e temos o vazio
estático público, principal. Essa será a nova visibilidade
da IA. Temos a visibilidade
V. E o eu é a visibilidade é nova Eu visibilidade visibilidade para
ser como nova visibilidade. E se executarmos isso, devemos ter a
seguinte saída. Então isso demonstra
a visibilidade. Quando estamos falando
sobre escopos. Esse conceito define uma parte
do aplicativo em que
a variável é acessível e é chamada
de escopo de uma variável. Ou as variáveis podem ser definidas em classes, métodos e loops. Então, por exemplo, se temos uma
variável de nível de classe cast definida, ela se parece com isso. Então, classe pública A. E podemos ter o
evento a, que é seis. E quando declaramos uma variável na classe
fora de qualquer método, ela pode ser acessada em
qualquer lugar da classe. No nosso caso, assim
como a variável a. Quando definimos uma variável
dessa forma, elas são chamadas de campos de classe
ou membros de classe. Portanto, também podemos falar sobre a visibilidade
no nível do método. E podemos definir,
por exemplo, vazio. Primeiro. Esse será o nosso método. E teremos um C duplo, que
será dez, isso é 0. E poderíamos ter a linha correta
do console C. Dessa forma, demonstramos como
os métodos encapsulam o nosso
próprio namespace e as
variáveis definidas dentro dele. Podemos ver como o valor
da
variável deve ser impresso. E também podemos criar variáveis de nível de
bloco. E essas variáveis definidas
em um bloco vão viver apenas ou ficar acessíveis enquanto estivermos na execução do
bloco. Então isso era tudo que eu
queria mostrar a vocês sobre escopo e visibilidade. Vejo você na próxima.
6. C # Avançado inseguro: Olá e bem-vindo de volta. Neste vídeo,
falaremos sobre insegurança em C-Sharp. Então, basicamente, estamos falando
sobre código inseguro em C Sharp. Quando codificamos o código, executamos o código sem
supervisão do CLR, que é curto para o tempo de execução da linguagem
comum. Portanto, código inseguro é um código
que pode incluir ponteiros. Portanto, você pode tirar uma
conclusão de que os ponteiros
não são seguros em Dó sustenido. No entanto, não é
inteiramente verdade e
estamos aqui para lançar alguma
luz sobre esse mistério. Portanto, o CLR controla
a execução de programas desde o carregamento até a
memória até a segurança do tipo de
tratamento de exceções. Existem inúmeras
instalações fornecidas pelo CLR e há duas
instalações que são fornecidas. O primeiro é o coletor de
lixo, que deve
limpar depois de objetos não utilizados. E o segundo é o gerenciamento de
threads. Portanto, existem dois componentes principais
do framework.net. Temos o laboratório base, BCL, que é a biblioteca de classes base, e o CLR, que é o tempo de execução da linguagem
comum. Portanto, a BCL nada mais é do que
a biblioteca dotnet padrão, que pode ser acessada
por meio de aplicativos de console, aplicativos
VPN, ASP.net e assim por diante. É um conjunto de classes e
funcionalidades
predefinidas que você pode reutilizar. Então, basicamente, eu posso ser
dividido em mais duas partes, o CTS, o CTS e o CLS. O CTS é a especificação
de tipo comum e o CLS é a especificação de
linguagem comum. Precisamos esclarecer mais
dois conceitos
que são necessários para
entender a execução do código de resposta e o que isso significa. Então, dois tipos de código que é código
gerenciado e código não gerenciado. O código gerenciado é
considerado um código seguro. O código não gerenciado não é seguro. Então, basicamente, o código gerenciado é executado inteiramente sob a
supervisão do CLR. Ele é rastreado e o lixo é
coletado automaticamente. Ele também tem acesso a todo
o arsenal de
instalações fornecidas pela CLR. Agora, aqui vem as dicas. Portanto, os ponteiros são
interpretados apenas no
contexto, contexto de código não salvo ou
inseguro ou não gerenciado. E um ponteiro pode
ser um tipo de ponteiro, um tipo de valor, tipo de referência. Então, para definir um ponteiro, precisamos do seguinte código. Podemos ter uma estrela int, que será
chamada de ponteiro int. E podemos ter uma
estrela vazia, meu ponteiro vazio. E o nome do
tipo definido antes do asterix é chamado
de tipo de referência. Os tipos de ponteiro
não herdam
da classe
base object place e não
há conversão entre os tipos de
ponteiro e a classe de objeto
base. Também podemos definir
vários ponteiros. Então int, estrela por dano, minha saúde, minha experiência, etc O coletor de lixo
não protege as referências do
objeto. Isso significa que, mesmo que o ponteiro para uma referência ou uma estrutura
que contenha referências, o coletor de lixo
pode coletá-la ou coletá-la. Portanto, se proibido, é proibido que um
ponteiro aponte para uma referência ou uma estrutura
que contenha uma referência. E podemos ter ponteiro
dos tipos de base em C sharps. Então, vamos demonstrar isso. Vou comentar isso. Então aqui temos array, que vai
conter dois inteiros, que serão 12. E podemos usar a estrela fixa int p igual a 0. Aqui, o que gostaríamos de
fazer é ter P2, que é igual a p. e usar o console, o console, direita, linha, estrela V2 ou asterix P2. Então, para nos livrarmos
do vermelho abaixo da linha, podemos dizer que isso não é seguro. E basicamente depois disso, vamos ver a prova. Tudo bem. Vamos usar o console. Existem três chaves
para ler o valor. Então, agora, como você pode ver, temos um ponteiro
que aponta para o primeiro elemento da
matriz, que é um. E a palavra-chave answer if
marca a seção do código que, para o compilador,
conterá ponteiros. A palavra-chave fixa significa que
fixamos o asterix, seremos muito capazes. Portanto, este no topo
da nossa pilha e o último asterix ser mais igual a
um é chamado de deferência. Eles estão se referindo. Então, basicamente, se formos em frente
e fizermos algo assim, então asterix p mais é igual a um. Então podemos usar o console
dot write line asterix be. Então, agora, se você executá-lo, você pode ver que movemos
nosso ponteiro com um índice. Portanto, há uma lista
de operadores e declarações que podemos usar para manipular ponteiros na
resposta do contexto. Assim, podemos ter basicamente
o acesso de membro. Podemos ter a indexação, podemos ter o
endereço de uma variável, poderíamos ter os operadores
aritméticos, e podemos ter
operadores de comparação e assim por diante. Portanto, também podemos ter algumas
declarações que são
fixas e a pilha é log , então travada e bloqueada significa alocar memorial
na pilha. E se você quiser verificar a
resposta se propriedades de revestimento, podemos ter métodos, tipos e blocos de código, que podem ser definidos como seguros,
pois o código é necessário para funções
nativas que
dependem de ponteiros e Como código, o introduz riscos de segurança e estabilidade do
código que contém nossos sub-blocos
precisam ser compilados com inseguro que o que corrigimos aqui. E, em alguns casos, como
se Deus pudesse resultar em melhor desempenho, uma vez que as
verificações dos limites da matriz são removidas. Então isso era tudo que eu
queria mostrar a você sobre inseguro. Vejo você na próxima.
7. C# Coleções Genéricos Avançadas: Olá e bem-vindo de volta. Neste vídeo,
falaremos sobre coleções
genéricas para que possamos ligar. Então, essas
linguagens de programação surgiram. Geralmente havia um requisito
comum entre eles e as pessoas queriam armazenar dados de forma estruturada
para, mais tarde, recuperá-los e manipulá-los. eram operações genéricas
que normalmente executadas nesses
conjuntos de dados, como ímpar, remover, localizar, classificar,
substituir cópia, clonar, número de elementos
armazenados e assim por diante. C-sharp e dotnet não são
exceção nessa situação. Portanto, existem basicamente dois
tipos de coleções que são fornecidas com uma estrutura
à nossa disposição. O primeiro é janeiro, e o outro não
é genérico, mas eu tive que dotnet versão dois, existem apenas coleções. E se você quiser categorizar coleções
não genéricas, podemos falar sobre
ArrayList, tabela de hash, lista
classificada, pilha, fila
e as Coleções genéricas, pelo
menos o dicionário é
classificado, lista, pilha e fila. Portanto, a principal diferença entre coleções
genéticas e não genéticas é o valor dos tipos que elas podem armazenar na coleção
não genérica. Cada elemento pode representar
o valor de um tipo diferente. Enquanto o genérico significa que você pode ter apenas o mesmo tipo. Então, basicamente, precisamos do sistema de que as coleções
são genéricas para usá-lo. E isso nos permite
criar, por exemplo, uma lista de inteiros
chamada minha lista. E basicamente queremos
uma nova lista com, por exemplo, dez valores. Isso significa que
temos uma lista que só
pode armazenar números inteiros. Ele é chamado de mylist e executou valores
meio para baixo sem
a instrução using, poderíamos especificá-lo
da seguinte maneira. Então, basicamente, poderíamos
dar o caminho completo. Isso é só para ser interessante. Para seu interesse. O que também podemos fazer é
verificar a tabela hash não genérica. Uma tabela de hash. Deveríamos chamá-lo de meu haxixe. E isso vai
ter um novo hash,
a barra ou melhor, o conjunto de hash. Conjunto de hash e mostra possíveis correções para eles. Então, sistema que convoca eleições, esse genérico, esse conjunto de hash. Tudo bem, então
teremos o HashSet. E isso deve ser como um número inteiro ou
algo parecido. E temos a ver com os valores n, não. Janeiro na capacidade. Ou deveria ser HashSet D. Mas deve ser C sharp, hash hash table. Então, vamos fazer isso com a tabela hash. Então, vamos aceitar isso. Oh, isso deve ser uma chamada de sistema de ações que
hash the bow, meu hash. E agora podemos continuar. Então, basicamente, vamos chamar esse
novo sistema chamado eleições. A bola. Ótimo. Então, o que podemos fazer é
o seguinte, meu hash. E teremos a
participação da habilidade com o valor primeiro. E meu hash naquele site Ed Lu. E isso deve
ser chamado de segundo. Agora, ótimo. Então, o que podemos fazer aqui
é o seguinte. Então, para cada 13 D no meu hash. E eu acho que isso
também virá das coleções
do sistema que entram no
dicionário. Ótimo. O que também podemos
fazer é simplesmente
terceirizá-lo aqui usando o sistema
que coleta. E agora podemos removê-lo. Ótimo. Então,
gostaríamos de iterar sobre isso e usar a linha certa
do console. E teríamos a
tecla D igual a esse valor. E use o console para ler a chave. Para aceitar esse
valor, vamos executá-lo. E se você executá-lo, veremos o
seguinte resultado. Então é assim que
podemos usar a tabela hash. O que também podemos fazer é
ter uma ArrayList genérica. Então, basicamente, vamos
criar uma lista de matrizes. Minha lista também é igual a
nova lista de matrizes. E não daríamos um
argumento nesse caso. E usar a minha lista para
adicionar uma milha é adicionar
à minha lista três
lineares e assim por diante. Então, apenas por uma questão de demonstração, e para cada objeto guerra
por elemento na minha lista,
dois, nós seguiríamos em frente e
consolaríamos o elemento de linha de gravação de pontos. Ótimo. Agora, o que podemos fazer é ver a saída na
tela após a execução. E basicamente é isso. Portanto, há também outro conceito chamado
boxe e unboxing. E esse conceito é
muito importante quando estamos trabalhando com
genéricos em C Sharp. Em geral, o conceito e sua realização fornecem
alguns benefícios
das coleções de tipos fortes,
além de fornecer código de
maior qualidade e
desempenho aprimorado. Existem duas categorias principais
para o tipo de dados é C sustenido. Um é chamado de tipo de valor e o outro é
chamado de tipo de referência. O boxe é o
processo de converter um tipo de valor em um tipo de
referência. E nos bastidores, o CLR aloca um novo
objeto no heap e, em
seguida, copia o valor do
valor dos tipos de valor
para essa instância. Por exemplo, temos um inteiro que é a
b com o valor 99, um objeto B, que
é igual a a. E vamos mudar desta forma. E nós temos a, C
com o inteiro b. E agora o que podemos fazer é
usar a linha direita do console, veja, mais b, mais a. E lá vamos nós. Portanto, não há espaço entre o espaço que não
seja enganoso. E aqui vamos nós. Então, tecnicamente, isso era
tudo que eu queria mostrar. Você. Vejo você na próxima.
8. C # Advanced Explicit vs Conversões Implícitas: Olá e bem-vindo de volta. Neste vídeo,
continuaremos nossa jornada em Dó sustenido. E vamos falar sobre conversão de
tipo
explícita e implícita. Então, basicamente, existem duas categorias principais
de linguagens de programação. O primeiro é tabulação estática e o segundo é digitado
dinamicamente. Então digitou estaticamente
estes como C-Sharp, C, C mais, mais e assim por diante. E digitado dinamicamente é como Python e Ruby e outros enfeites. E a digitação dinâmica
às vezes também é chamada
de digitação de pato. Então, basicamente, se
parece com um pato, anda como um pato e
grasna como um pato. Então provavelmente é um pato. Vamos dar uma
olhada nos recursos fornecidos pelo C-sharp em relação à
digitação estática em C-Sharp, quando uma variável é declarada, ela não pode ser declarada
novamente ou atribuída um valor de outro tipo. Tipo. O tipo é implicitamente conversível para um
determinado tipo de variável. Isso é decidido durante o tipo de
compilação e impõe uma restrição sobre como um desenvolvedor usaria variáveis de
declaração, embora também venha com
um aumento de velocidade na execução. Portanto,
linguagens digitadas estaticamente geralmente são mais rápidas do que as
digitadas dinamicamente, mas ambas têm suas vantagens
e essas vantagens. Então, por exemplo, se
dissermos que temos um inteiro que
é j em C-Sharp, então não podemos fazer o seguinte. Atribua string como um valor. Isso simplesmente
não vai dar certo. Mas o que podemos fazer é
atribuir um valor de dez ou fazer o seguinte que 0. Isso deveria funcionar. E isso nos daria um anúncio ou porque o inteiro e uma string ou não
implicitamente conversíveis, pode
chegar um
momento em que precisaremos copiar um valor de
outro valor aqui, valor de um variável
para outra variável, como passar inteiro para
um método que usa argumentos longos duplos
ou permanece um para empurrar variáveis entre classes. Portanto, o C sustenido fornece maneiras de converter um tipo em outro. Um é implícito, o
outro é explícito. O terceiro é definido pelo usuário e o quarto é a conversão
com classes wrapper. Portanto, a conversão de tipo também é
chamada de fundição ou tipografia. Conversões implícitas. O que devemos saber sobre eles? Basicamente, quando falamos
sobre conversão implícita, essa não é uma sintaxe especial
para essa conversão de tipo. Esse é o
tipo mais seguro de fundição. Nenhum dado é perdido. Por exemplo, converter
de tipos inteiros menores para maiores ou
classes em classes base. Essa é uma tabela de
conversão numérica implícita,
que é útil
quando queremos
descobrir quais números inteiros
são compatíveis. E você pode encontrá-lo aqui
no lado da Microsoft. E, por exemplo, para uma conversão
implícita, poderíamos usar o seguinte. Vamos esconder isso. Portanto, temos um número inteiro que
é chamado de número 128, e teríamos um duplo, que é maior e
é igual ao número. E a amplitude é um exemplo
de conversão implícita de classe para classe base
seria algo assim. A classe a é igual à nova classe. E teríamos
a classe base C, que é igual a a. Isso é apenas um exemplo porque eles não estão bem definidos, mas é assim que você
pode e deve fazer isso. E há uma série
de conversões, subtipos que são
considerados implícitos. Por exemplo, conversões de
identidade, conversões numéricas
implícitas e assim por diante. Agora que temos a
conversão implícita fora do caminho, devemos falar sobre
X mais versões calmas. Portanto, esse tipo de fundição também
envolve um operador de custo. E o processo geralmente está associado à
perda de informações ou falha na conversão entre conversões normalmente
não métricas. Mencionei quando convertemos de um tipo de dados de precisão maior
para uma precisão menor e às vezes,
a conversão de uma classe base para uma classe de banco de dados é
mostrada também aqui. Então, um exemplo para uma
conversão explícita seria meu pi. E
diríamos que temos
um inteiro a e gostaríamos de ter o valor como um inteiro da
minha torta associada a a. E se fôssemos usar
a linha direita do console com a e meu b, obteríamos a seguinte chave de ganância de
Guanzhong. Vamos salvá-lo e executá-lo. Assim, podemos ver que o decimal, os números após o
ponto de corte. Nesse caso, podemos falar sobre conversões executadas
entre classes. Então, temos, por exemplo, uma classe OPA, que é o carro. E isso seria um
exemplo da classe alta. E teremos um carro C, que será igual a o.
E teríamos a OPA o igual a c. Então este é um exemplo conversão
explícita entre
classe e classe base. E basicamente é isso. O que eu queria te mostrar. Vejo você na próxima.
9. Funções com expressões avançadas C #: Olá e bem-vindo de volta. Agora, o que gostaríamos de
aprender em c-sharp é o tópico, a expressão, mas
funciona com sintaxe. Mas funk, synth Don't Save. OK. Assim, com a versão da versão
seis da linguagem C Sharp, esse recurso foi adicionado
à linguagem de programação. É chamado de membros do
corpo de expressão. A ideia por trás desse
recurso era tornar o código mais
legível e conciso. E vamos
ver neste vídeo
como esse novo recurso pode ser
incorporado ao nosso código. Portanto, temos o
conceito de membros em C-Sharp, e está relacionado à programação
orientada a objetos. Os números nos permitem
modificar o comportamento de nossa classe e mudar a
forma como ela interage com outras classes e permitir que ela e
informações encapsuladas conforme necessário. Portanto, os membros são a cola que mantém a aplicação unida. Então, quais são os membros
que estão disponíveis? Temos construtores,
destruidores, getters e setters de
propriedades,
métodos e indexadores. A expressão but
in members pode ser aplicada a qualquer um dos
itens acima mencionados, mas precisamos
considerar qual deles está disponível em nossa versão
atual. Portanto, versões suportadas
da versão seis, o getter de propriedades e métodos. A partir da versão sete,
o construtor, setor de propriedade do
destruidor e os indexadores. Então, vamos dar um exemplo para o construtor e o destruidor. Então, basicamente,
teremos um servidor de classe. Dentro de nossa classe, teremos
o nome da string pública e
o nome da string do servidor público
é igual a nome , igual a nome. E precisamos ter
certeza de que esta é a maiúscula M e esta
é a capital N. Tudo bem, agora, poderíamos ter nosso destruidor
para o servidor. E poderíamos simplesmente dizer na linha certa
do console
que o fim está próximo. Tudo bem. Agora, o que teríamos aqui, vamos chamar isso de amigo const de
classe pública. E teríamos nosso
público estático, vazio principal. E teríamos o servidor, que é um do novo servidor. Então aqui, ou melhor, controlador de
domínio. E depois disso, o que poderíamos fazer é usar o ponto do console, escrever um nome de linha e usar a chave do console. Aguarde o aviso. Agora, se o executarmos, podemos ver o seguinte ODE. E sim, basicamente é isso. Então, é assim que
podemos usar nos membros. O que também podemos fazer é
usá-lo basicamente em acessadores. Então, por exemplo, se meu servidor deve ter
um público na CPU V, então poderíamos ter
o retorno get da CPU v Scott v, e o setor retornar o sublinhado V
CPU igual ao valor. E sim, teríamos também a CPU
privada int underscore V. Então é assim que podemos aplicá-lo basicamente
à fonte de acesso. Então, poderíamos seguir em frente e usar
uma vCPU para ser igual a dez. E poderíamos
adicioná-lo à nossa produção. Se o
executarmos, podemos ver que esse servidor tem dez núcleos. E também poderíamos
ter um indexador usado. Então, tecnicamente, se definirmos a string pública e
chamarmos essa rede, então isso pode ser uma nova
string com cinco valores. E poderíamos usar
a string pública. E esse int eu recebo adaptadores
de rede. E adaptadores de rede são
iguais a valor. E aí temos os adaptadores de rede
com essa string. E nós deveríamos ter esse I. E este com o índice. É assim que
o usaríamos em indexadores e também
poderíamos usá-lo em métodos. Então, basicamente, se
definirmos nosso vazio público, poderíamos ter a linha
certa do console inicializando. E depois diga que o
estado é igual a Iniciado. E para que isso funcione, precisamos definir o estado
privado da String do pub. E é mais ou menos isso. Então, isso é tudo
que eu queria dizer sobre a expressão,
mas ela funciona. Portanto, essa é uma maneira mais nova
e concisa usar suas aulas
com todas as guloseimas. Vejo você na próxima.
10. C# precedência avançada do operador: Olá e bem-vindo de volta. Neste vídeo, falaremos sobre a
precedência do operador em C-Sharp. Então, vamos criar um novo
projeto para isso. Então, basicamente, a ordem dos
termos e da expressão em qualquer linguagem de programação é determinada pelo resultado
da avaliação. E a
precedência do operador em C-Sharp determina como o agrupamento desses termos e
expressões acontece. E abordaremos
o essencial sobre o
que você deve conhecer dessa técnica e criar aplicativos
semanticamente corretos. Portanto, existem três tipos
diferentes de operadores que são operadores unários, binários e ternários. E isso define quantos
operandos e operadores podem levar. O United pega um, o binário leva dois e o curtume leva
três operandos. Precisamos falar
sobre associatividade. Então, basicamente, existem dois
tipos de associatividade:
um é da esquerda para a direita
e da direita para a esquerda. E a precedência do operador é significativa somente se houver operadores de precedência
maior e menor em uma expressão. Nesse caso, a precedência
é da esquerda para a direita. Então, por exemplo, int x é igual a sete mais três dividido por dois. A ordem que precisamos
lembrar é que, quando
falamos em urina, temos essa força seguinte. Então temos o tamanho
do final, a estrela. Os prefixos mais,
menos , negação,
mais, , negação,
mais, mais e
menos menos. E então temos o elenco de tipos. Quando falamos sobre expressões
condicionais, temos o ponto de
interrogação e a coluna. E temos atribuições
compostas simples, Like igual vezes igual
dividido por igual, e assim por diante. E podemos basicamente mudar a precedência dos
operadores por parênteses é, e é isso que quero dizer com isso. No primeiro caso, primeiro
dividiremos três por dois e depois adicionaremos sete. No segundo caso, somaríamos 37 e
depois dividiríamos por dois. Então isso era tudo que eu
queria mostrar. Você. Vejo você na próxima.
11. Pontos de entrada e saída do método avançado C #: Bem-vindo. Neste vídeo, falaremos
sobre métodos, pontos de
entrada e saída. Então, cada aplicação C, C-Sharp tem um antropólogo
chamado método principal. Esse método é invocado primeiro e qualquer
lógica
de negócios implementada em seu AP
é controlada. A partir daqui. Neste guia, vamos descobrir como o CRM CLR,
para que o tempo de execução de linguagem comum saiba qual método
chamar e quando chamar. E vamos
ver a diferença
nesses contextos entre
os aplicativos executáveis
e as bibliotecas. Portanto, o CLR é o tempo de execução da
linguagem comum. objetivo é
traduzir seu código para
que o hardware
da sua máquina possa entender suas intenções. Quando você escreve o
código em dó sustenido, ele é chamado de código-fonte. O compilador
específico da linguagem transformará esse
código em algo chamado MSAL ou linguagem
intermediária da Microsoft. E às vezes também é
chamado de CIR, ou linguagem intermediária comum. E basicamente, o estado intermediário
do código também tem metadados específicos de
linguagem e tipo e
a implementação real
de cada uma de nossas classes, funções, métodos,
e assim por diante. Agora, o CRM CLR entra
em ação e fornece um serviço e o tempo de execução para o seu código
residir e o GIT, o compilador de tempo de ajuste
também vive nesta RAM, que transforma o código
em código de máquina, que, por sua vez, é executado
pela CPU em seu computador. O exemplo mais básico é o que
você pode ver na tela. Então Ponzo, aquela
linha certa, olá mundo. E quando executamos esse código, podemos ver que o Hello World está impresso
no console. E depois disso, ele fecha. Então, quando temos um aplicativo que é comparado a um arquivo executável, temos duas
abordagens distintas para pontos de entrada. Um é síncrono e o
outro é assíncrono. O tipo de função principal
é sempre estático. E temos a opção de
escolher se queremos
retornar o código de status depois que o aplicativo existir ou não. E precisamos usar
inteiro, caso contrário, vazio. Então,
métodos síncronos são esses. Então, se formos aqui e fizermos isso, tão básico Curly, vamos lá. Temos um main que
não retorna nada sem argumentos. Um é com argumentos, e o outro principal está retornando um inteiro
sem argumentos e o outro é com argumento. E o outro tipo
ficaria assim. Portanto, temos algo
chamado tarefa no domínio. E também pode ter versões argumentativas
e não argumentativas. Por que é duplicado? Os pontos de saída servem como um mecanismo de controle e eles transferem o
controle de volta para o chamador. Com o valor
de retorno de um tipo específico ou nulo. O método principal para alcançar
os pontos de saída significa que nosso aplicativo está fechado. Então, por exemplo, se
dissermos que retornaremos 0, então esse
será nosso ponto de saída, por assim dizer, em uma função. E isso é tudo que eu
queria te mostrar. Vejo você na próxima.
12. Restrições de parâmetros C# Advanced Genéricos: Olá e bem-vindo de volta. Neste vídeo,
falaremos sobre restrições genéricas de
parâmetros. Assim, o genérico tornou-se parte do
C-sharp com a versão 2 da linguagem e o CLR, o tempo de execução da linguagem comum. Ele introduziu
um novo conceito de parâmetros de tipo que
permitem projetar classes e métodos que diferem da especificação
de uma ou mais guias até que a classe ou método seja declarado e instanciado
pelo código do cliente. Então, por exemplo, se
fôssemos criar uma classe, classe genérica array d, e dizer que temos
o vazio público. Resuma a entrada. E é assim que você pode
definir uma classe genérica. E, basicamente, essas classes e métodos combinaram três recursos
distintos. Uma é a reutilização, a
segunda é a segurança do tipo e a terceira é a eficiência. Os genéricos são mais frequentemente
usados em conjunto com coleções e métodos
que operam neles. Um novo namespace foi introduzido, que é chamado de system
that collections, que genérico, que contém várias novas classes de
coleção baseadas em genéricos. Também temos a possibilidade de
criar tipos genéricos personalizados. Então, precisamos falar sobre
parâmetros também. Portanto, chamamos o parâmetro de
espaço reservado para um tipo específico que o cliente
especifica quando cria uma instância
de um tipo genérico. Uma classe genérica
não pode ser usada como está, porque é simplesmente um blueprint para esse tipo e
precisamos declarar, em
seguida, instanciar um tipo
construído por tipo específico de volume. E podemos ter um
exemplo para isso. Então, por exemplo, se
tivermos esse array genérico, que é um número inteiro, então é assim que nós o
instanciaríamos. E vamos ver as
possíveis soluções. Nós não temos um. Tudo bem? Então, neste
exemplo, mostramos a instanciação de
instanciação para o blueprint de
array genérico com tipos inteiros. E, nesse caso, o parâmetro t é
substituído em tempo de execução. E com o argumento type que nos permite criar um tipo de objetos
seguros e eficientes
usando uma definição de classe. Existem algumas regras sobre nomenclatura,
portanto, os parâmetros de tipo genérico devem ter nomes
descritivos e prefixo parâmetro de tipo
descritivo T, ou algo parecido. Também temos oito restrições das quais precisamos estar cientes. Então, deixe-me copiar
e colar aqui. Então, quando d é um strike, o argumento deve
ser um tipo de valor, exceto agora a bola,
quando é classe, o argumento deve
ser um tipo de referência e se aplica a
classes quando t não é. Agora, o argumento deve
ser não, não liberal. Quando não é gerenciado,
o argumento deve ser um M e cada tipo,
é uma classe base. O argumento deve ser
tratado a partir de uma classe base. Quando d é uma nova instância, o argumento deve ter um medidor
pai menos construtor. Quando é uma interface, o argumento
deles já deve estar implementado
em uma interface específica. E quando for você, o argumento deve
ser ou papai com o argumento
fornecido para você. Então, por que usamos restrições? imposição de restrições ou parâmetros de tipo
específicos nos
permite aumentar o número de operações permitidas e chamadas de
método para aqueles suportados. E o que
gostaríamos de fazer é
criar uma demonstração
para o exame. Deixe-me comentar isso. Digamos que temos uma classe, classe genérica com t, onde t é uma classe. E podemos dizer que temos
um t privado somente leitura, que é um campo. E temos uma classe
genérica pública, o campo ou melhor, o valor. E esse
campo sublinhado é igual ao valor. Também temos o método genérico público
t com o medidor inferior T. E podemos seguir em frente e usar
a linha certa do console. E diga que o tipo
do medidor inferior é T
e valor é valor. Ou melhor, medidor ou medidor inferior. Tudo bem? E o método genérico. E as mulheres precisam ter certeza de
que devolvemos esse campo. E podemos usar a linha certa
do console. A impressão de que
o tipo
de retorno do parâmetro é dipolo. Valor T. Este campo de pontuação. Tudo bem, aqui podemos
instanciar nossa turma. Assim, podemos ter uma string de classe
genérica a, que é igual à nova string de
classe genérica hello world. E podemos usar a chamada de método
genérico a dot. E podemos usar a linha de gravação de pontos
do console, não a linha direita,
a tecla de leitura para pausar por um segundo. E vamos dar a isso
a sequência de argumentos. Tudo bem, vamos executá-lo. E como você pode ver, temos uma string com
a string de valor. E lá vamos nós. Então, essas são as mensagens
que podemos ver. Tecnicamente, isso era tudo que
eu queria te mostrar. Vejo você na próxima.
13. C # Avançado Abrir e Fechado tipos genéricos: Bem-vindo. Neste vídeo, falaremos sobre os tipos
genéricos de abertura e fechamento. Assim, com a versão
dois de C Sharp, um novo conceito foi incluído, é introduzido, que
é chamado de genética. A ideia básica era permitir que tipos
específicos como
float, double ou string fossem passados como
um parâmetro para métodos, classes e até interfaces. Essa é uma
limitação muito crucial para as coleções, que é a falta ou mesmo a
ausência de verificação de tipo. No entanto, isso permite que você
adicione os objetos de qualquer tipo de interconexão
porque eles são todos descendentes da classe base do
objeto. Isso contradiz a definição
básica de C, C-sharp como sendo um tipo seguro e compreende a segurança do tipo. Neste guia, vamos dar
uma olhada mais profunda sobre o que são
genéricos e o que eles propriedade
aberta e fechada significa. Os tipos em C Sharp têm
duas categorias principais. Um é chamado de valor e o outro é chamado de tipos de referência. Ambos podem
ser tipos genéricos que usam parâmetros
de tipo individual. Então, o mês de janeiro fechado. Portanto, um dos
recursos mais poderosos e C-sharp, que faz com que os desenvolvedores definam tipos de estruturas de dados,
como coleções. E isto é, isso não resulta apenas em
melhor qualidade de código, mas nos bastidores,
ele adiciona um aumento de
desempenho decente também. Então, vamos ver
como isso parece. Teremos um dispositivo de classe
pública. E esse dispositivo terá um nome público d0, Get and Set. E a categoria pública T. Com o gatt e o conjunto. Faremos com que o público aguente. Isso vai aqui. Então, esses serão os genéricos da classe
pública. E o que
gostaríamos de fazer é ter o público estático, vazio principal. E dentro do principal, teríamos o dispositivo
com a string a como
um novo controlador de domínio de dispositivo. E vamos pular o nome. Tudo bem, sim,
devemos fazer isso? E temos o dispositivo float
b com o novo dispositivo float. E vamos apenas fechá-lo. E podemos modificar o a, esse nome para ser o controlador de
domínio. E a categoria
a para ser essa coisa. E isso vale para o B também. O servidor DNS estará
nessa categoria. E vamos chamá-lo de produção. E o que podemos fazer é,
por exemplo, esperar. Isso deve ser 1 f e
2 f. Então console, direita, linha, a, nome e uma categoria. E o mesmo vale para o B, O, K e use o cólon. Então, leia a tecla para manter o console. Por que damos uma olhada nisso? Lá vamos nós. Criamos uma classe genérica que representa um dispositivo. E com base no
tipo do genérico, podemos inicializar os valores. E o que também podemos fazer é
criar um janeiro aberto. Então, gostaríamos que esse
código demonstrasse isso. Então, teremos uma aula pública, o g com o T. E precisamos usar a reflexão do pensamento
do sistema. E aqui teremos
o público em M, g. E teremos um
woo hoo igual a 0. Para usá-lo, o que precisamos fazer é
criar uma instância. Então, teremos um vazio estático
público. Espera aí. Isso está na
genética vegetal é pública. Objeto estático. Será executado? E isso vai
ter o tipo de enum
g para isso. Pegue o campo vermelho mais frio. Woo hoo. E gostaríamos de
obter o valor. E agora o que podemos
fazer é seguir em frente e criar um novo
objeto de instância que será executado. E teremos a linha certa
do console. Conte-nos o seguinte. Isso é genérico? E usamos o foo
que digita
informações de tipo e é uma definição
de tipo genérica. Agora, é assim que você pode
definir os genéricos abertos. E usando
a reflexão para obter um
campo constante, o Woo-hoo. O CLR converte automaticamente o inteiro em uma
instância do tipo aberto. Então, basicamente, foi isso. O que eu queria
mostrar neste vídeo. Vejo você no axônio.
14. Parâmetros e descarte avançados do C #: Olá e bem-vindo de volta. Neste vídeo, vamos dar uma olhada em dois recursos
incluídos na versão
sete em Dó sustenido. E esses recursos mudaram
essencialmente a forma como os desenvolvedores trabalhavam e os
aplicativos eram desenvolvidos. O parâmetro app é útil quando os métodos precisam retornar
mais de um valor. E esse parâmetro é passado por referência e basicamente
transforma o parâmetro formal, um alias para o argumento
que deve ser muito capaz, muito semelhante à palavra-chave
reference. Mas a principal diferença
é que o último precisa ser inicializado
antes da mão. A variável descarta basicamente
temporária,
portanto, variáveis fictícias que são
usadas no código do aplicativo. objetivo principal deste gato é fornecer variáveis
reutilizáveis
que diminuem a alocação de memória e melhoram a legibilidade
e a capacidade de manutenção. Primeiro, vamos dar
uma olhada no parâmetro OUT. Então, basicamente, tem três regras. O parâmetro pode ser passado sem declaração
e inicialização. Ele pode usar o tipo var na lista de parâmetros do
método. Não precisamos ter
o mesmo nome para nosso parâmetro na
função e no núcleo. Então, vamos fazer uma demonstração para isso. Temos uma string
estática pública, SLA. Com o duplo a e o duplo B. Dentro desta função,
gostaríamos de ter um resultado que vem da
matemática em torno de a vezes b. Ou melhor, como
devemos fazer isso? B dividido por a. E gostaríamos multiplicá-lo por 100
e precisamos de dois dígitos. Então é isso que
gostaríamos de ter. E teremos a
string SLA igual ao total de horas disponíveis. Horas. E o SLA é o resultado. Agora, o que gostaríamos de
fazer é devolver o SLA. E o que gostaríamos de
fazer depois disso é
basicamente modificar nossa assinatura de
função. E diríamos que nosso resultado duplo saída
e SLA de string de saída serão outros parâmetros. E temos que remover a
inicialização disso. Podemos usar essa função
chamada a partir de agora. Então console a linha certa. E gostaríamos de usar
o que usaríamos SLA. E, basicamente, gostaríamos de
ter o total de horas
disponíveis com oito. E gostaríamos ter o
resultado do romance e sair. String SLA e usar os telefones são fundamentais. Para salvá-lo. Tudo bem, vamos começar. E como você pode ver, esse é o resultado. O que também podemos fazer
é usar esse cartão. As variáveis deste cartão têm
o símbolo de sublinhado. Então, por exemplo, se criarmos uma variável que é
chamada Coupa com 12345, então vá em frente e
faça o sublinhado. , sublinhado Sublinhado, sublinhado é igual a cupom. Então, o que podemos fazer é
usar a linha certa
do console, escrever o
primeiro e o segundo. Então, deixe-me mostrar a você. Então isso é basicamente o simples, este é um exemplo simples para o descarte e como usá-lo. E nossa tarefa era
criar duas variáveis
das quais foram
nomeadas variáveis
do cupom e descartar
o restante dos valores. E se pudermos dizer
algo
assim, o verdadeiro poder
dessa carta é quando a
combinamos com a variável externa. Então, por exemplo, se tivermos
public void, sorry, static, void B, S com a
string d t. Então se o tempo que
seca barrar o SDR e sair sublinhado, então poderíamos dizer que os cones à direita a
data da linha é válida. De outra forma, a data da linha
direita do console está em Guanzhong. Esquerda. Tudo bem. Não vamos
esquecer esse aqui. E se pudermos ir em frente e ligar para o PS com o O2, 292022. Devemos ver o
seguinte em nossa tela. E aqui vamos nós. Então, tecnicamente, isso é tudo que eu queria
mostrar a vocês neste vídeo. Vejo você na próxima.
15. Diretivas avançadas de pré-processador C #: Olá e bem-vindo de volta. Neste vídeo,
falaremos sobre
diretivas de pré-processador em C-Sharp. Então, basicamente, esse conceito pertence ao
reino das linguagens compiladas. São linguagens compiladas
ou linguagem que leva algum código de nível superior
como C-Sharp ou C. E com a ajuda do compilador, ele o traduz
para código de máquina. O compilador é uma camada de
abstração entre diferentes arquiteturas
de fabricantes. Ele sabe como traduzir blocos de código para arquiteturas
diferentes. Então, sim, processadores Intel
ou AMD. E o processador
em si não garante o código final
da máquina. Como o próprio nome sugere, ele está apenas pré-processando
as instruções. Temos um idioma de nível superior. Então temos um pré-processador do que uma linguagem pura de alto nível, do que um compilador e montador, carregador e vinculador. Portanto,
as diretivas de pré-processador podem ser a instrução if como uma
folha e if e assim por diante. E vamos dar uma
olhada em um exemplo simples. Por exemplo, se quisermos
usar essa diretiva, poderíamos dizer que, se depurar, gostaríamos de
dizer que o console do sistema, modo de depuração da linha
direita. Gostaríamos de dizer ponto
do console do sistema, escrever linha e conhecer o bug. E depois traga aqui. E podemos fechar isso
com a declaração endif. E aqui definimos uma
diretiva de pré-processador que diz que isso só deve ser
considerado no modo de depuração. Caso contrário, não
imprimimos nenhuma depuração. E podemos executar essa solução no modo de
lançamento ou depuração. E, por padrão, o modo de
depuração é R1, e essa é a saída
que devemos ver. Então, vamos em frente e usar as chamadas do
sistema ou a tecla de leitura. Se executarmos a solução, você pode ver que estamos
executando no modo de depuração. E sim, essa foi a demonstração. Então, definimos um indefinido. E essas diretivas
podem ser usadas para definir ou definir diretivas
para o pré-processador. E o caso de uso mais comum para isso é quando
gostaríamos definir condições extras para
a compilação em si. Portanto, isso geralmente é feito em
conjunto com a diretiva def. E, basicamente, poderíamos ir
em frente e definir o desenvolvedor. E se for fraude, gostaríamos de
dizer que definimos debug
e undefined, brace and end if. E devemos
colocá-lo no primeiro. Isso está funcionando. Então,
o que também podemos fazer é usar o aviso ou
o anúncio ou, basicamente, poderíamos dizer que se não corroer, não testar e não Deb, podemos lançar
uma mensagem de erro informando que não combinar. Omitimos uma
mensagem de aviso informando que está sendo executado com código fixo. E podemos acabar com
essa declaração if. E se executarmos essa solução, não veremos nada. Mas no minuto em que
removo este, vemos que há
adultos na compilação e podemos ver a
mensagem de erro que não podemos compilar. Portanto, esse é um comportamento
que podemos implementar. O que podemos fazer é
usar também a directiva align. Então, a linha que ativa nos permite modificar a
numeração do slide do compilador e até mesmo o nome do arquivo para os adultos e avisos. Então, digamos que
gostaríamos de modificar o nome do arquivo relatado quando
um aviso é gerado. Então vamos colocar aqui
e dizer essa linha,
um, querendo linha que C S. Agora, se removermos isso, devemos ser capazes de
executar nossa solução. Nós temos essa saída. Tudo bem? Agora, o que gostaríamos de
fazer é aprender sobre
região e região n. Portanto, essas diretivas são úteis
quando estamos trabalhando com editor
do Visual Studio Code
ou com o próprio estúdio. E não há
saída especial dessa dieta ativa, mas permite que você marque regiões
específicas que
serão expansíveis e colapsarão,
colapsarão a CBO pelo
editor de sua escolha. Então, por exemplo,
poderíamos dizer que uma região usando e poderíamos dizer que
esta é a região final. E agora somos capazes
de colapsá-lo. E também temos o pragma, o aviso de pragma
e a soma de verificação do pragma. Em palavras simples, diretiva
pragma pode ser usada para afetar como os
relatórios ou avisos de tempo de compilação são tratados e dar instruções especiais
aos compiladores. Portanto, existem duas variantes básicas. Um está querendo, o
outro é checksum. Quando usamos querer, temos a opção de especificar desativado
ou restaurar, seguido por uma lista de avisos que precisam ser tratados ou nada pressupõe todo tipo de desejo
soma de verificação congênita, gera uma soma de verificação do arquivo de origem que
terá a depuração. Então, por exemplo, se tivermos o seguinte pragma definido e executá-lo, você verá que não
há problemas encontrados. Basicamente, isso era
tudo que eu queria mostrar a vocês sobre
diretivas de pré-processador. Vejo você na próxima.
16. Índices de Sobrecarga Avançada C #: Bem-vindo. Neste vídeo,
falaremos sobre indexadores de
sobrecarga em C-Sharp. Portanto, no C-Sharp, temos muitas
estruturas de dados diferentes disponíveis. E isso nos permite armazenar e recuperar dados específicos
em nosso momento de necessidade. Neste vídeo,
vamos aprender sobre indexadores e,
especialmente, como você pode sobrecarregá-los
fazendo o caminho certo. Quando falamos sobre o indexador sobrecarregar a ideia
por trás disso, a força, a classe para se comportar como uma estrutura de dados e
acompanhar suas instâncias que nos permitem recuperar
essas instâncias à medida que faria com uma
matriz, matriz de lista. Primeiro, limpamos o tópico
dos indexadores e, em seguida, voltamos nossa
visão para adicionar sobrecarga. Então, vamos criar um novo
projeto na carga. Então essa é uma
sintaxe geral, basicamente de modelo para isso. E vamos
dar uma olhada nisso em
um exemplo prático. Então, por exemplo, digamos que
temos alunos de uma turma. E aqui temos uma matriz de string
privada. E vamos chamar isso de indexadores, que é uma nova string
com valores de Dan. E temos uma String pública. E isso aponta para o índice. E o que gostaríamos de
fazer é o seguinte. Teremos o gatt, que retornará o índice
dos indexadores e o conjunto, que definirá o
índice para um valor específico. Aqui no geral, o que gostaríamos de
fazer é criar uma nova instância dos alunos, e vamos chamar isso de escola
primária. E aqui gostaríamos de ter o
primeiro elemento da escola primária com meu nome, e o segundo elemento da
escola primária com o nome do meu irmão. E o
segundo elemento da escola primária recebe o nome da
minha irmã. E o que gostaríamos de
fazer é pegar um loop
for e iterar de 0 a I less than e imprimir a linha correta
do console. E a escola primária. É o elemento. Em seguida, use a
tecla de leitura do console para manter o prompt. Agora, como você pode ver
no console, temos os três nomes. E é claro que
está piscando aqui porque o resto
da lista está vazio. Agora, o que acontece aqui? Temos um curso de classe, alunos se comportando como uma matriz
estranha e permitindo que até dez nomes
de alunos sejam armazenados no domínio. A turma é instanciada e três alunos são inseridos. E se fôssemos definir os seguintes elementos, escola primária, TAM, mãe, então deveríamos
ter uma exceção. Porque
não há um décimo elemento. O tamanho simplesmente não
nos permite que sejam
pontos importantes aqui. Portanto, existem dois
tipos básicos de índices. Uma e duas dimensões. pesquisa de índice pode ser sobrecarregada
e elas não são iguais às propriedades e
permite que um objeto
seja indexado e definido como acessador. Vamos designar. No entanto, recuperaremos um valor. O valor é usado quando
você define o valor. E os indexadores são chamados de matrizes
inteligentes ou propriedades
parametrizadas, o que pode ser um
pouco enganador. E os indexadores não podem ser membros
estáticos,
pois são como membros da classe. Então, como sobrecarregamos
os indexadores? Vamos criar uma nova classe. Vamos chamar esses guias. E temos uma string privada, nomes de
matriz e guia, que é uma nova string. Valores de Dan. Teremos a string pública, esse índice int esse índice int retornará o valor do índice de nomes de
guia. E o conjunto definirá o valor do índice de nomes de guia para o valor especificado. E poderíamos ter o público durante isso
com o índice flutuante. E devemos ter as mesmas funções
Get e Set. E teremos a
string pública, esse id duplo. Vamos modificar este. E teríamos definido como um. E aqui não
teríamos uma definição definida. Ambos retornam algo
que é chamado, isso é somente leitura. E agora, no nosso principal, se comentarmos isso, podemos instanciar os guias. E teremos um valor duplo, o k, e é**** 0. E aqui o primeiro
elemento do guia seria escrito. E o elemento
baseado no índice flutuante das guias estaria nas guias. E o que podemos fazer é
usar a linha certa do console. E gostaríamos de
imprimir o elemento guias k. E gostaríamos de
imprimir o primeiro elemento. E gostaríamos de
imprimir o primeiro
mais o
primeiro elemento baseado em flutuador. Tudo bem? Então, o que podemos ver
aqui é que
acessamos basicamente
versões
diferentes disso com base no tipo de
indexador que usamos. E aqui temos um índice
que é um número inteiro. E aqui temos um
que é um valor flutuante. E podemos referenciá-los e manipulá-los com
base nesse valor de retorno. E temos um exemplo final que gostaríamos de
dar uma olhada, e seria chamado chá
multidimensional mais
que mencionei agora. E aqui teremos
a string privada. E nós temos essa vírgula. E temos os nomes dos guias, que é igual a
uma nova string dez vezes. Então teríamos
a string pública, isso int x e int y. E teríamos o get, que retorna os nomes de
guia x
e y. E teremos o conjunto
que vai definir o guia nomeia x
e y para o valor. E se formos em frente
e instanciá-lo, então use todos eles. Os diamantes agora são iguais
aos novos multidimensionais. E depois use o a primeiro. Haverá o Danio e um para ser outro. Então podemos usar
loops aninhados para iterar sobre j igual a 0, j
menor que o termo j mais mais. E use a linha certa do console. E gostaríamos de
usar a e y ou j. E o que gostaríamos de
fazer é adicionar o cheque. Então, se x e y
são iguais a null, então usamos os telefones toda essa linha
brilhante com a string f. X e y estão vazios. Então, vamos fazer isso x, e vamos fazer isso y. E caso contrário, desculpe, eu e j. E j. Caso contrário, gostaríamos de
usar essa impressão. Tudo bem. Então, agora na saída, isso é o que podemos ver. Por que tecnicamente é isso. É assim que você pode sobrecarregar
os indexadores em C-Sharp. Vejo você na próxima.
17. Atributos pré-definidos comuns avançados em C #: Olá e bem-vindo de volta. Neste vídeo,
vamos dar uma olhada no propósito
dos
atributos predefinidos comuns em C-Sharp. Assim, os atributos permitem que
os desenvolvedores associem metadados ou
informações declarativas em seu projeto e seu código. Uma das maneiras que eu
prefiro usar são as aulas ou
funções de
amanhã obsoletas à
medida que o desenvolvimento do aplicativo
continua? E primeiro vamos dar
uma olhada no que
são atributos e ver alguns
exemplos disso. Portanto, os atributos são lugares em seu código onde
podemos defini-los. E eles são como montagens, métodos, tipos e
a lista continua. Depois de associar o atributo à nossa parte
selecionada do código, temos a opção de
consultá-lo com uma técnica chamada reflexão. No framework.net, cada
tipo e componentes, como assemblies e classes, têm seus próprios metadados
definidos por padrão, que podem ser estendidos por informações de metadados
personalizados como nós, nós somos no gol. E quando aplicamos informações de
metadados, temos a opção de
escolher o escopo. Podemos aplicá-lo a montagens
inteiras ou apenas a
partes específicas do nosso código. Os atributos têm a
capacidade especial de continuar, para serem configurados
com parâmetros. E, finalmente, a coisa mais
especial sobre metadados é que nosso
aplicativo pode inspecionar seus próprios metadados e também
inspecionar outros
metadados de progresso. Isso nos permite criar a verificação de
compatibilidade
e outros recursos interessantes. Então, há esse
código esqueleto que podemos usar. E isso vai nos dizer que esse é
um parâmetro posicional, tem valor e assim por diante. Digamos que temos o
seguinte código que representa a máquina de camisola
e tem duas funções. Uma é a inicialização
da máquina e a outra é a instalação de atualizações. Portanto, temos o servidor de classe
pública e ele tem o nome da string
privada. E tem o nome da
string pública, nome da propriedade. E defina o nome igual ao valor. Desculpe, nome sublinhado. E temos o nome da string pública,
nome do construtor. Ele vem para especificar um nome. E temos o servidor público de atualização
void, que está indo
direto para o console. Esse servidor de atualização. E nós temos o começo. E isso vai dizer que
estamos reiniciando o serviço. Ótimo. Então, agora o que
gostaríamos de fazer é
encerrar nossa aula. Sim. E à medida que o
projeto evolui, gostaríamos de adicionar a
próxima função que irá descontinuar o servidor de
atualização e lidar com a atualização
e a instalação e a tarefa de início restante
com alguma etapa extra. Então,
como deixamos os desenvolvedores saberem que a nova função
será introduzida, o que cobre isso. Tudo o que é. O que podemos fazer é adicionar
a nova linha, ou melhor, a definição
da função. E então diga ao
servidor de atualização que isso está obsoleto. E o que gostaríamos fazer é dizer à
duna para usar esse método, usar o início. E também podemos ter
essas quedas falsas aqui. Então agora temos isso, dessa maneira. Tudo bem? Portanto, o
ponto chave aqui é essa linha, e ela precisa ser precisa
com os nomes das funções. Caso contrário, o compilador
lançará um erro informando que o método ao qual estamos nos
referindo não pode ser encontrado. Então, o que gostaríamos de
fazer é copiar este e ter certeza de que isso também está correto. E precisa ser preciso
para os nomes das funções. Caso contrário, o compilador
lançará um anúncio ou declarará que o método ao qual estamos nos
referindo não pode ser encontrado. O segundo argumento é verdadeiro
ou falso. Quando definimos como false, o compilador
emitirá um aviso, mas a compilação que
passaremos. Se for definido como true, uma exceção será levantada e
a compilação será interrompida. E esse também é um conceito chamado de segmentação por
atributos. E aponta para a entidade a
qual o atributo
é direcionado. Nesse caso, a
função a é o alvo. Agora podemos falar sobre atributos
predefinidos. Esses atributos
se referem a um conjunto de atributos que são incorporados à
biblioteca de documentos pela Microsoft. E precisamos estar
cientes de que essa é uma classe base para atributos, que é chamada system
that attribute. E cada atributo
predefinido do cliente é herdado dessa classe base. Os
atributos predefinidos mais comuns são serialização, serialização, obsoleto, DLL,
importante e método úmido. O que podemos fazer é definir os atributos de
nossos clientes. Portanto, qualquer pessoa que use
o framework.net e defina seu
custo de absolutos, pode ser para uso privado
ou privado, é empacotado em
biblioteca ou aplicativo público. O que gostaríamos de fazer é seguir em frente e criar
a seguinte demonstração. Então temos que
importar o sistema
dessa reflexão. E o que queremos fazer
é definir uma classe. E o uso do atributo dessa classe será o
atributo alvo dessa classe. E a classe será
chamada de atributo da empresa, que herdará
da classe base do atributo. E teremos o nome da string privada, a localização da string
privada. E o
nome da string pública com a lacuna. Isso retorna o nome. E o conjunto,
que vai definir o nome igual ao valor. E teremos a localização
pública da string. E teríamos um construtor. Portanto, atributo de empresa pública e a empresa de string e
a localização da string. E gostaríamos de
ter o nome igual a empresa e a localização igual à localização. Tudo bem? Então, agora que temos
isso fora do caminho, podemos ter uma nova classe base de
atributos onde a
empresa será imaginária. E terá algo
localizado em Atlanta. Isso, isso vai
ser chamado de servidor de classe. E ele terá um nome de string
privado. E a string privada. Esse nome de string público. Com o GET. Vamos lá. Isso retorna o nome e o conjunto que retorna
nome igual a valor. Tudo bem, então temos
essa aula pública. Vamos chamar esse servidor
da empresa, desculpe. E teremos essas
funções reaproveitadas. Portanto, temos essas
funções obsoletas e
o resto começa e a adicionamos nas funções de adestramento. E aqui, no geral, podemos criar um servidor a
partir do novo controlador de domínio
do servidor da empresa. E por que está chorando? Ele não tem construtor, é
claro, porque precisa ser definido. Portanto, público, servidor da empresa ,
string, nome e o nome
são iguais ao nome. Tudo bem, agora temos
o construtor e teremos
as informações do membro. Informação é igual a tipo ou
tipo maluco de fama, mas sim o servidor da empresa. E a matriz de objetos
com
o atributo será a informação,
obtenha atributos personalizados. Morra o atributo da empresa
e um falso. Tudo bem? E depois disso, podemos usar o loop foreach para iterar sobre cada atributo de objeto
em atributos. Em seguida, basta usar
o atributo da empresa C igual ao
atributo da empresa, atributo. Você. E cones na linha certa. Cifrão, citação, um, nome e um local ou não. B. C, esses locais, desculpe. E podemos usar os da tecla três para
manter o prompt. Tudo bem, agora, como você pode ver, conseguimos obter o atributo de uma instância
específica. E é assim que você pode usar atributos predefinidos
comuns em C-Sharp. Vejo você na próxima vez.
18. C# Avançado Leia only somente para leitura: Bem-vindo. Neste vídeo, falaremos
sobre três, as únicas
propriedades automáticas em C-Sharp. Portanto, leia somente
as propriedades automáticas. O que eles são? Nós divergimos e seis têm
C-sharp lançado em 2015. Então, sete anos não
acompanharam o visto
Studio Ultimate. Esse foi um
recurso muito exclusivo implementado. Isso é chamado de propriedade
automática somente leitura e às vezes chamada de propriedade automática somente
getter. Então, neste vídeo,
vamos
pegar o conceito de
campos e propriedades
e ver como ambos
podem ser somente leitura e como eles são implementados, focando
no aspecto de propriedade automática. Então, medos versus propriedades. Esses dois conceitos
giram em torno da ideia de abstração.
Com a turma. Você pode ter campos
e propriedades. Os campos são
membros variáveis normais ou de classe. Por que eu escrevi carro? Uma aula de carros? E as propriedades são uma
abstração que
permite obter ou até mesmo
definir seus valores. Então, por exemplo, poderíamos criar a classe de campo público e
lamentaríamos, classe, ok. Nome da string
privada e função de string privada. E o que podemos fazer é definir esses chamados campos em um construtor
de construção. Então, o servidor público foi curado, teríamos o
nome da string, a função da string. Aqui. O que gostaríamos de
fazer é dizer que esse nome é igual ao nome. E essa função é
igual à função. Quando definimos campos, devemos nos certificar de que os
definimos como privados. Isso garante que não estamos violando o conceito
de encapsulamento. Resumindo, o encapsulamento significa que estamos construindo os campos, mas estamos agrupando os
campos ou dados com métodos e funções
capazes de manipulá-los. E não expomos esses
dados para manipulação direta. E esse código atual
não é realmente suficiente
porque
não podemos recuperá-los. Então, o que temos que fazer é
ir em frente e definir o seguinte nome de
string pública, nome. E usaríamos para obter para
retornar o nome e o conjunto, o conjunto, o nome para o valor. Teríamos a função de string
pública e obteríamos
a função e
definiríamos a função como valor. E agora temos, agora
temos a opção de ler
e modificar as propriedades. Então, vamos ver nosso resfriado. Portanto, o campo do servidor é igual a um
novo campo sanduíche. E o nome é DC. A função no
fio prateado é uma. E a função é controlador de
domínio. Tudo bem? Agora, o que podemos fazer é
usar a linha certa do console, a impressão, um nome
e uma função. E não se esqueça do
console que tem três chaves. Então, quando executamos esse exemplo, essa é a saída. Então, nós os
definimos e acessamos com sucesso, e
inicializamos nossa classe com um construtor
mais tarde, os campos foram alterados com a ajuda
de acessadores de propriedades. E também obedecemos ao princípio
de encapsulamento. Agora que esclarecemos o conceito, podemos temperá-lo com
o aspecto somente leitura. Quando queremos criar
um campo somente leitura, só
precisamos usar
a palavra-chave Somente leitura. Então, se modificarmos
isso para somente leitura, então podemos ver que o nome
sublinhado ficará vermelho. E neste caso
de um número de medo, isso significa que só temos uma
chance de
inicializar o campo com valor. Isso acontece quando chamamos o construtor construtor e começamos a receber um
anúncio ou de tal tentativa. Portanto, isso pode ser removido com segurança. Se executássemos
isso mais uma vez, você pode ver que
está funcionando bem. Mas se eu tentar dizer que
o nome é igual a novo nome, o que devo ver
é que esta é uma propriedade somente leitura
e não pode ser modificada. Tudo bem? Então, no caso do número do
campo, tudo bem? E vimos a saída. Portanto, é assim que você pode usar propriedades Alto
somente leitura em C-Sharp. Vejo você em.
19. Síntaxe avançada para literais: Bem-vindo. Neste vídeo,
falaremos sobre como você pode reconhecer a
sintaxe para alfabetização, incluindo
sequências de salto de deck Unicode e
sublinhados em C-Sharp. Então, vamos direto ao assunto. Mais tarde nós em C-Sharp e nada
mais do que valores fixos. Esses valores são usados por
variáveis ou constantes. Existem muitos tipos de
literais, como inteiro, ponto
flutuante, caractere,
string, booleano. E se dermos uma
olhada em literais inteiros, isso seria um exemplo. E é um tipo de literatura
que diz respeito a números inteiros. E existem basicamente
três subtipos, decimal, octal e hexadecimal. Esse é o decimal. O que poderíamos fazer é
criar o octo, que é o, oh, vamos lá. E oito. E agora 028. E podemos ter o hexadecimal, que é 0 x um, C por exemplo. E basicamente o que poderíamos fazer é seguir em frente e usar os
cones ou a linha da esquerda para a direita. E digamos que o nome
da variável de a tenha valor. E faça isso por
todos os três. Então isso é para o O e o H. E não se esqueça do
cólon, então leia a tecla. Então, se o executarmos, é
isso que
temos na tela. Portanto, observe como o nome de nos permite nos
referir ao nome de uma variável em nossa interpolação de
string. A outra coisa que
podemos não notar é como os valores aparecem no caso
de hexa e número octal. E eles basicamente gostam
dos prefixos de prefácio. Não vemos o
prefixo hexadecimal ou o prefixo. O que podemos fazer é
criar literais de ponto flutuante. Então, vamos criar o
flutuador f k igual a 283848. E poderíamos ter o octo
flutuante flutuante F B, que seria o
28 ou 27 menos cinco. E nós poderíamos O, desculpe, d e romance. Sim, agora parece estar melhor. Então poderíamos ter o 28º F. E agora o que podemos
fazer é imprimir os valores. Então o a, o B e o C. E se o executarmos, observe como isso também tem a notação diferente quando é impresso na tela. Esta é a
notação científica para os carros alegóricos. E também podemos ter literais de
caracteres. Então car c é igual a, ou podemos definir a versão
Unicode. Então você deve três O, seis. E vamos imprimir isso. , ca. Veja isso. Vejo você. Lá vamos nós. Portanto, esse é o caractere Unicode para o ponto de
interrogação, por exemplo. E também podemos ter literais de
string. E também podemos ter
os literais booleanos. Vamos imprimi-los. Então este é o S. E isso vai ser a abelha. Vai ser a abelha. Lá vamos nós. E o que podemos ter também são sequências de escape
Unicode. Então, por exemplo, essas são as sequências de escape
que podemos usar. O Unicode me
colocou em barras invertidas. Assim, podemos ter o caractere de
arco, o backspace, a
alimentação do formulário, retorno de carro, nova linha, torneiras horizontais,
verticais, aspas simples, aspas duplas e a barra invertida também. E também temos que
falar sobre sublinhado. Então, na minha experiência, esse tópico é um dos mais divididos entre os desenvolvedores. Uma razão para isso
é que há
aqueles que estão aprendendo Dó
sustenido como primeira língua, tentando seguir
as melhores práticas e guias de estilo de codificação. E também há
aqueles que vêm de
diferentes origens, como C, C mais Python
ou qualquer outra linguagem. E eles tendem a nomear
variáveis de forma diferente. E, é claro, cada
empresa pode ter sua própria diretriz de codificação
ou diretriz de estilo. E o que você pode fazer é dar uma
olhada no estilo policial. E também o British Heart. Essas são ferramentas que
permitem criar uma
versão baseada em estilo ou guia de estilo
verificado do seu aplicativo. Então isso era tudo que eu
queria mostrar a vocês neste vídeo. Vejo você na próxima.
20. Como retornar avançadas referências lidas apenas a partir de funções: Bem-vindo. Neste vídeo,
falaremos sobre três transformando
referências somente leitura de funções. Portanto, esse tópico que
você tem gira em torno do tipo e do código seguro de
memória. Então, divergimos e um dos desenvolvedores liberados em
C-sharp poderia passar argumentos para
métodos por referência. Conforme o tempo passou e a
programação mudou, a palavra, surgiram
novos desafios que forçaram os novos recursos
a serem adicionados ao C-sharp. Com a versão
sete do C-sharp, dois
recursos muito importantes foram adicionados. Uma era
a possibilidade de declarar referências a variáveis
locais e
a outra era
retornar por referência a
partir de métodos. Construiremos a base para entender os dois
tipos de argumentos. Passagem de argumentos. Então, qual é a diferença
entre valor e finanças? Esses são dois
tipos principais em C-Sharp e também temos
a possibilidade de definir tipos personalizados, mas isso não está no
escopo deste vídeo. Portanto, os tipos de referência mostram
diferentes
características de desempenho se
olharmos por diferentes
características de desempenho se baixo do capô, porque a própria natureza dessa implementação em que suas guias não têm nenhuma sobrecarga memorializa os dados que você pode armazenar em um tipo específico, como
string inteira double, têm
um tipo
específico, tamanho específico e tipos de referência
precisam adicionar campos extras. Um é o cabeçalho do objeto e o outro é
a tabela do método. O cabeçalho do objeto é usado
pelo common language
runtime para armazenar informações
adicionais e
é basicamente uma grande máscara. Então, vamos dar uma olhada no struct. Portanto,
estrutura pública somente leitura, uma dinâmica. E essa estrutura
teria a string pública, Bob Lake string por
nome, com o GET. E público duplo. De fato, relação com o GET
e o público int, casos
iniciais e dupla taxa de mortalidade
pública. Agora podemos ter uma instância ou um construtor
para a pandemia. E teria
o nome da string, double ratio e int
e double rate. E agora aqui na pandemia, teríamos o
nome do vírus igual ao nome, a proporção é igual
à proporção de fato. E o caso é, desculpe. De fato, a proporção deve
ser igual à proporção. E o caso inicial, isso deve ser
igual a k é, é, e a taxa de mortalidade
deve ser igual à taxa. E podemos ver que os
acessadores são lidos, são definidos apenas com get
e o conjunto está faltando. E não lemos
apenas a palavra-chave
que diz ao CRL que nossa estrutura será imutável. Isso significa que, com o tempo, os
campos não podem ser alterados. Agora gostaríamos de
combinar esse homem, O aspecto acima mencionado, que é a estrutura e os valores de
passagem por referência para criar uma demonstração
para este tópico. Então, o que gostaríamos de fazer é criar isso. Tudo bem, então o
alinhamento é bom. Classe pública, simples,
ref, somente leitura. E teremos a matriz estática int
com o novo int três. E vai ser 123. E o índice estático int
get, int index. E devolvemos ao RAF um índice. E teríamos o vazio estático
público para o
nosso quê. Isso deve ser fechado. E aqui
gostaríamos de usar os cones toda essa
linha brilhante para obter o índice. Espera aí. É aqui
que devemos colocá-lo. Obtenha o índice primeiro e use
os cones ou a tecla de leitura. E podemos ver o
valor que é um. Então, neste código,
vemos uma matriz estática de inteiros com
um tamanho de três. E nosso método GET
index está tomando um índice como
argumento e retorna um int em um jar de nossa
matriz, que é radônio. Se passarmos o índice
que é maior que o comprimento da matriz
ou menor que 0, então obtemos uma exceção
do índice fora do
intervalo exceção. Então, se quisermos criar
um exemplo mais complexo, poderíamos fazê-lo da
seguinte maneira. Então, digamos que temos struct, que representa as
salas de aula. Então isso tem o construtor, que está pegando um
nome e o tamanho. E também tem um array privado
de utilização atual. E tem um nome e as propriedades de
tamanho, e assim por diante. Então, agora o que podemos fazer é seguir em frente e criar o seguinte. Então, temos um bar
muito chamado quartos,
e é uma nova sala de aula. E aqui gostaríamos de
ter as novas salas de aula. Matemática com dez pessoas. E novas salas de aula ficam mais ricas com 20. E não vamos
esquecer de fechá-lo. Podemos ter a escola var
e ela tem novas salas de aula. E a escola. Essa sala de armazenamento
vai ocupar as salas
que serão inicializadas. E então podemos usar os
telefones com toda a linha certa para imprimir a escola que
recebe a utilização. 10. Se você executá-lo, poderá ver a utilização diferente da
sala de aula. E é basicamente
assim que você pode criar suas próprias referências
somente leitura para serem retornadas de
funções em C Sharp. E tecnicamente, isso era
tudo que eu queria te mostrar. Vejo você na próxima.
21. Método avançado de C # sem um nome: Bem-vindo. Neste vídeo, falaremos sobre métodos sem nome. Portanto, este é um conjunto de recursos em C sustenido que é muito
importante entender. Esse conjunto de recursos
gira em torno de lambda, expressões
lambda, delegados
e métodos anônimos. Vamos ver
como você pode usá-los. Primeiro, vamos
falar sobre delegados. Então, normalmente funciona ou pausa um
ou mais parâmetros ou nada. Geralmente eles retornam
algo ou realizam operações específicas com
dados ou textos que possuem. Estamos falando de delegados
quando gostaríamos de
passar a própria função
como parâmetro. Vamos ver o que o
C-sharp tem a oferecer. Primeiro, gostaríamos de
criar um delegado. Por exemplo, teríamos o servidor Linux de
string estática pública, que tem o
nome da string, estado da string. Teríamos a verificação se o estado é igual a
up, então retornamos. O servidor é. Caso contrário, o
que gostaríamos de fazer. Se o estado estiver em baixo. Então podemos retornar
o servidor está fora do ar. E, finalmente, retornar estado desconhecido. Tudo bem. Então, isso funciona
com o problema de ter
entre aspas duplas. Ótimo. Tudo bem. Agora, o que temos que
fazer é criar uma reação de estado de string delegada com o servidor de string
e o estado da string. E temos que definir
a a string estática
pública do Windows Server com o
nome da string e o estado da string. E o que gostaríamos de fazer para devolver o servidor está no estado. Estado com o
cifrão, é claro. E devemos
movê-lo aqui dentro do programa. E aqui gostaríamos de
criar uma reação estatal. Linux é igual à reação do novo estado. E usaríamos
o servidor Linux. E a reação de estado Windows, nova reação de estado
Windows Server. E gostaríamos de fazer
o seguinte console, linha
direita, Linux, bind e up. E teríamos
outro Linux que é LDAP e temos o seguinte. Então, agora gostaríamos de ter essa reação do estado ou apenas
vê-la em ação ao vivo. Então, qual é o problema? Como você pode ver, não há problema. O servidor está ativo, então está basicamente
funcionando conforme o esperado. E sim, poderíamos estender ainda mais a
funcionalidade dessas coisas com a verificação remota ou abertura de
tíquete se você estiver em uma grande
infraestrutura corporativa, mas vamos tecnicamente. Então, agora vamos falar
sobre métodos anônimos. Então, na seção anterior, foi discutido como os delegados são
tipos de referência e usados para
referenciar qualquer método que
tenha a mesma assinatura. Em contraste com elas, as funções
anônimas tratam de analisar bloco de
código ou código como
um parâmetro delegado. Vamos criar o exemplo
a seguir. Delegado público. Estado vazio, o estado da string. E no vazio estático principal, o que gostaríamos de fazer é
criar o
escopo externo, que é 99. E o estado S
vai ser um delegado. E será um delegado de estado de
string. E basicamente o que
gostaríamos de fazer é usar
a linha certa do console. E o estado foi inscrito. Vamos fazer uma string f
e fechar o console. Linha certa. Sinal de dólar. O valor do escopo
externo está fora do escopo. E nós vamos
enviar D para cá. E se o
executarmos, devemos fechar
este também. Devemos ver o seguinte. O estado para cima e terceiro, e o valor do escopo
externo é 99. Então é assim que você pode
definir métodos anônimos. O último deve
ser parâmetros lambda que verificamos quais expressões
lambda. É uma
função anônima que pode conter expressões
e declarações. Então, vamos criar o seguinte. Teremos a
função string, string. E
será um nome bem-vindo. E definimos o nome de boas-vindas de
retorno. Peso, claro,
o cifrão. E não se esqueça de fechá-lo. Então, agora podemos usar a linha certa
do console para imprimir o polegar da riqueza. Danielle. Se o executarmos, você pode ver que estamos
usando a expressão lambda. Poderíamos criar outro exemplo. Então int, int n 34 é igual a
x e retorna x vezes três. E então podemos
imprimir a entrada 0.5. Deveria ser 15. Então isso era tudo que eu queria mostrar a vocês neste vídeo sobre expressões
Lambda, delegados e métodos
anônimos. Vejo você na próxima.
22. C # Advanced LINQ: Bem-vindo. Neste vídeo,
vamos dar uma
olhada na sintaxe de
consulta integrada à linguagem, que é a
versão longa da sugestão vinculada. E foi introduzido em outra estrutura dotnet com a versão 3.5 em 2007. E o conceito central
era estender
a estrutura e, junto com ela, a linguagem C-sharp com recursos de expressão de
consulta. Por exemplo, se formos
criar um exemplo, podemos criar uma string
ArrayList. E que contém lista de
servidores com a
nova string de lista. E gostaríamos de ter o controlador de
domínio
do tear de sino de garrafa. E prótese,
que é o DNS. E a chave, que
é o ACP. E basicamente essa é
a estrutura que você pode definir
na função principal. É assim que podemos
demonstrar isso. Portanto, d c é igual a list, server list, onde S, S contém Domain Controller. E vamos movê-lo
aqui dentro do principal. Então agora podemos usar a linha certa
do console, a impressão, os DCs. E como você pode ver, esta é a lista de EECS. E tem basicamente
uma execução adiada. Então, para nos
aprofundarmos na fila vinculada e quais outros benefícios
existem para comer, precisamos entender o que é a execução
adiada. Na maioria dos casos,
durante a compilação, as expressões de link
são avaliadas em um conjunto de dados específico e as variáveis inicializadas
com os valores filtrados. Ao implementar a execução
adiada, podemos economizar recursos valiosos de CPU
e RAM. Porque o conceito nos
permite não
avaliar uma
expressão específica ou atrasar a avaliação até que o valor realizado seja
realmente necessário. Há dois
casos em que é muito útil. A primeira é quando seu
aplicativo está trabalhando em vários gigabytes de dados
ou até mesmo terabytes de dados. E a segunda é quando você encadeia
várias consultas que resultam em diferentes
manipulações dos conjuntos de dados. Portanto, temos uma palavra-chave sobre a qual
precisamos falar. E isso é rendimento. Para aprofundar
nossa compreensão das diferentes execuções, precisamos introduzir uma
palavra-chave chamada yield. E isso foi introduzido com
a versão 2 do C-sharp. É com o Vita para avaliação
preguiçosa e melhorar o desempenho das consultas LINQ. E o rendimento da palavra-chave
é o contexto que você está, o que significa que
ele pode ser usado como um nome de variável
sem problemas. Então, vamos criar um
pequeno aplicativo. Aqui. Gostaríamos de ter
um servidor de classe pública. E tem um nome de string
e uma função de string. E temos o nome da
string pública com o Get. Isso é suposto
retornar o nome. E o conjunto, que
supostamente
define o nome é igual ao valor. E temos o mesmo
para a função até
agora, função de string sombria. E usamos a função,
esqueça a resposta. Tudo bem. Também teremos
construtor, então servidor público. E esse construtor
vai usar o nome e a função. E definir função
é igual a função. Nome é igual a nome. Tudo bem? E basicamente isso
sobre a classe do servidor. E vamos ter
outra aula pública, que é o programa provisório. E aqui gostaríamos de
criar um I estático público inumerável para o
servidor, o banco de dados do servidor. E aqui precisamos
definir o seguinte. Teremos uma
matriz de servidores com os servidores. Essa é apenas uma nova
instância do servidor. E essa instância
será preenchida pelo novo servidor ou
pelo empréstimo incorreto
e pelo controlador de domínio. E nós vamos
ter o que quer que seja e onde quer que seja. E um deles será
o HCP e o DNS. Tudo bem. Isso agora está fechado. E o que
gostaríamos de fazer é ter
o S para cada servidor nos servidores e gerar o retorno S. Então, agora temos os
sublinhados perdidos. E o que podemos fazer
no domínio é usar o forEach no banco de dados do servidor. E simplesmente use a linha direita
do console, cifrão e use o nome do ponto S e
a função do ponto S. Agora, se executarmos, você pode ver que temos a execução
adiada demonstrada e somos capazes de iterar
sobre o INR I inumerável. E a chave aqui é o rendimento. Então aqui o retorno S, que nos permite iterar sobre cada elemento da nossa lista de servidores. E não retorna
a lista inteira de
uma só vez para salvar o MOD conhecido
e melhorar o desempenho. Este também é um
exemplo de execução adiada. Como o loop for each estava retirando os
termos um por um. E devemos considerar a diferença entre Lizzie
e execução ansiosa. Então, ou avaliação também. O uso da avaliação lenta significa que apenas um
único elemento
da coleção de origem é processado durante a chamada para o iterador. Então, algo assim. E um iterador pode
ser uma classe acostumada ou um loop foreach ou abide
dependendo do contexto. E isso era tudo que eu queria
mostrar a vocês neste exemplo.
Vejo você na próxima.
23. Interpolação de cadeias de caracteres avançadas C #: Bem-vindo. Neste vídeo, falaremos sobre interpolação de
strings. interpolação de string
tem algo a ver com
a impressão no console. E é basicamente
uma tarefa comum. Podemos imprimir uma mensagem de
status simples, o resultado de uma ação
específica. Realmente não importa. O que importa é a flexibilidade de
nossas declarações de impressão. E também importa como isso
se encaixa no fluxo do programa. Por exemplo, devemos
considerar o seguinte. Portanto, a interpolação de string pode
usar três tipos de variáveis:
substituição, acesso a matriz, expressões e chamadas de método. O aspecto mais importante da interpolação de string é
o caractere de cifrão. Então, por exemplo, string where, onde deveria ter
score e string what? Tomate. E você pode usar a
linha de gravação de pontos do console para imprimir. Comprei e
usei a linha de gravação de pontos do console, não a linha direita, o console, li T. E se o executarmos, você pode ver que esses valores variáveis
eram bem interpoladores. E basicamente o que podemos fazer é interpelar
matrizes também. Então, vamos criar uma matriz
inteira que contém os números pares 2468. E agora podemos usar a linha de escrita de
pontos do console que a política. Portanto, o primeiro, o segundo, terceiro e o quarto são números pares. E lá vamos nós. Isso
deve ser o primeiro e deve ser números pares. Tudo bem, então agora a saída
parece estar boa. O que podemos fazer é
também interpelar expressões ou intercalar
com expressões. Portanto, temos dois valores, x, x é igual a oito e y é igual a dez. Poderíamos usar o
seguinte para imprimir uma
saída bem formatada. Então X mais Y é igual a X mais Y. E poderíamos
dividir vezes e talvez menos. E se for agudo esse exemplo, devemos ver o
seguinte na saída. Portanto, você tem a
opção de avaliar expressões quando
estiver interpolando. Você também pode criar uma
função que terá a estática int fourth power int x. E ela deve retornar x
vezes x vezes x vezes x. E aqui no console. E poderíamos escrever x para o quarto é quarta potência x. Dessa forma, interpolamos
a própria chamada de função, e também podemos interpelar
com alinhamentos. Então, vamos criar a variável
workers, que é um novo dicionário
de string e string. Aqui, poderíamos dizer que temos o John,
igual ao DevOps. No entanto, John é igual
a subir de nível para adicionar. Aqui, o que podemos fazer é
usar a linha certa do console. A impressão que temos. Isso deve ser menos 15. E devemos ajudar
a posição com o 20. E use o para cada loop. Em trabalhadores. Aqui, imprima a chave do título. E o valor do título
deve ser K maiúsculo, K. E se executarmos isso, você pode ver que
temos o ritmo aqui. Nisso. Espera aí. Deveria ser assim. Parece melhor. Então isso era tudo que eu queria mostrar a vocês
sobre interpolação de strings. Vejo você na próxima.
24. Valor avançado C # e atribuição de tipos de referência: Bem-vindo. Neste vídeo, vamos falar sobre um tópico interessante em C-Sharp, que é chamado de valor e atribuição de tipo de
referência, tão bem e gráfico. Então, vamos criar o projeto. Portanto, com base no sistema
de tipos de uma linguagem de programação, existem duas categorias principais. Existem linguagens de
programação de tipo forte e fraco. E essas categorias definiram
como as regras de digitação se aplicavam durante a compilação e o
tempo de execução do código-fonte. Em 1974, Barbara
Liskov e Stefan zeros definiram uma
linguagem de programação fortemente tipada da seguinte maneira. Sempre que o objeto
é passado
da função de chamada
para a função seu tipo deve ser compatível com o tipo
declarado na função de código. Então, vamos
dar um pouco de contexto e dar uma olhada em como e qual é a
diferença entre eles. Portanto, na
estrutura dotnet e toque na linguagem de
programação c-sharp, existem dois tipos principais. Um é chamado de valor e o
outro é um tipo de referência. Esse é outro termo
chamado contextos. E há dois
contextos em dó sustenido. Um é chamado de seguro e o
outro é chamado de inseguro. Explicaremos isso mais tarde, mas deve-se mencionar
que, em contextos inseguros, temos um terceiro tipo
chamado ponteiro. Por enquanto, basta, sabemos o contexto seguro
quando o contexto é seguro, quando o código está sendo executado sob a supervisão do CLR. Existem quatro tipos que se
enquadram na categoria de
tipo de referência. Strings, array,
classes e delegados. E o resto dos tipos para se enquadram na categoria de tipo. Então bool de carro, decimal e assim por diante. Vamos dar uma olhada no tipo de valor. Então, digamos que temos uma função, estática
pública, vazio ao quadrado. E recebe um
duplo como argumento. E o que vamos
fazer é usar a linha direita
do console
e basicamente x vezes x. Agora podemos declarar uma variável a, que é Stan, e
usar o console. Ou melhor, simplesmente chame
o quadrado duplo de um. E vamos dar a ele uma tecla de leitura de ponto
do console. Agora, se o
executarmos, devemos ver a saída como 100. Então, o que acontece nos
bastidores? O valor desse conteúdo é
alocado na pilha e um único espaço na memória com
base no tipo é reservado
na mamária, essa variável
retém diretamente o valor. Então, se fôssemos
copiar esse valor para outra variável e atribuição, o valor seria copiado. Portanto, você terá o valor
desses resultados duas vezes, duas vezes na pilha
para cada variável. Cada tipo de dados predefinido
em braços e até estruturas. Ou dessa forma. Os tipos de valor são
criados em tempo de compilação. Por causa disso, eles são protegidos do coletor de
lixo. Ele não pode acessá-los. Agora vamos dar uma
olhada no tipo de referência. Então, digamos que temos um servidor de classe
pública. E esse servidor terá um nome de string, public e CPU e
public na RAM, ou apenas torná-lo duplo. Então, agora o que podemos fazer é
criar o público
e anular a inicialização. E vamos ter uma categoria e o
servidor S como argumentos. Portanto, caso a
categoria seja pequena
, o que gostaríamos de
fazer é criar ou melhor, atribuir o tipo small. E o que gostaríamos, desculpe. Tipo de string pública. Então, como o tipo deve ser pequeno, como a CPU deve ser um e S, a RAM deve ser dois. Como se a categoria fosse média. Em seguida, atribuiremos um pouco mais de
recursos e chamaremos isso de médio. Vamos ver dois núcleos, quatro GB de RAM. Se a categoria for grande, gostaríamos de atribuir as quatro CPUs grandes e
oito GB de RAM. Caso contrário, gostaríamos de
lançar uma nova exceção. Novo sistema, essa exceção
e categoria de
argumento devem ser
pequenas, médias ou grandes. Tudo bem? Agora, o que podemos
fazer é criar um servidor. O servidor
será um novo servidor. Podemos chamar a inicialização. Espera aí. Deveria ser assim. Quadrado. Por que não está funcionando? Nós temos isso. Temos
o servidor inicializado. E deve estar perto daqui. Então inicialize o servidor e um
logotipo e ele já está definido. Então, vamos fazer com que
seja e quadrado a. Portanto, não há argumento
dado o servidor inicial. Então, vamos fazer isso pequeno. E Lee. Portanto, temos a string
e o servidor S. Por que não é tipo de referência de classe
pública. E temos o servidor aqui, e o servidor de strings e programas. Portanto, temos o pequeno
meio e temos o servidor S, vazio estático
público. Ótimo. Então, agora o que devemos ser capazes de
fazer é usar a linha certa
do console de cones com o cifrão e apenas
mostrar os atributos. Então seja cpu, tipo
e B que Graham. E vamos dividi-los. Tudo bem? Então, basicamente, é isso. Temos uma classe que é
do tipo de referência. E isso é importante
observar porque a função
chamada initialize server, que está inicializando,
leva dois argumentos. O primeiro é
um tipo de valor e o segundo é
um tipo de referência. O tipo que é onde
a classe é passada, a função mudará as propriedades públicas
da passagem de classe por referência com base na
categoria. Nós passamos. Se passarmos por uma categoria
que não está implementada, então um
novo anúncio ou seu trono. Então isso era tudo que eu
queria mostrar a vocês neste vídeo sobre
valor e tipo. Vejo você na próxima.
25. Operador avançado de propagação da Nula: Olá e bem-vindo de volta. Neste vídeo,
falaremos sobre o
operador de propagação em C-Sharp. Então, em 2016, há muitas
coisas acontecendo. No dia 12 de novembro, houve um evento
chamado Visual Studio connect head pela Microsoft
no cilindro é lançado versão prévia do Visual Studio 2015 e
a versão C sharp seis. Esta nova versão
incorporou muitas mudanças que os desenvolvedores e a tecnologia
da época exigiam. Apenas para mencionar alguns
desses recursos, que era a propriedade
auto somente leitura
é a expressão do
inicializador de propriedade automática, MAS os membros da função de TI usando operadores
estáticos e
condicionais mais recentes. Portanto, neste guia, daremos uma olhada nos operadores
condicionais, ou mais comumente chamados
de operador de propagação. Também existem pessoas
por aí que se referem a esse recurso como operador de
navegação segura. Para entender isso, precisamos apresentar
dois novos operadores. O principal objetivo
desses operadores é
tornar a execução do código mais fluida e substituir a exceção
de referência
nula adição ou manipulação significativa. Então, vamos ver um exemplo para
o operador de acesso de membro. Antes do c-sharp. C sustenido, o código abaixo não
teria resultado em nenhuma exceção de referência. Então, temos esse estagiário ou grosseiro. Temos o vazio estático principal. Então, basicamente, esse é o código. E sim, temos um
servidor e é isso. Então, agora o que gostaríamos de
fazer é superar esse problema e podemos
fazê-lo da seguinte maneira. Então, vamos ter um servidor de classe
pública com
o nome da string pública, que tem um getter e setter. Agora, o que gostaríamos de
fazer é inicializá-lo. E teremos uma matriz de servidores, que
será chamada de servidores. E teremos uma
matriz de servidores com cinco servidores. Agora, o que gostaríamos de
fazer é ter um servidor, S1 será o novo servidor. E o S1, esse nome. Isso vai ser o primeiro. Vamos
ter um servidor, S2. E S2, o nome
será o segundo. Agora, o que gostaríamos de
fazer é atribuir
aos servidores e aos servidores. Segundo. E então vá em frente. Para cada servidor S, N servidores. E simplesmente use a linha de gravação de
pontos do console S, esse nome. Tudo bem. Qual é a verdadeira chave aqui é
que agora, se o
executarmos, devemos ver o
seguinte resultado. Então, basicamente, precisamos de uma matriz de cinco ou, neste
caso, dois elementos. E a pesquisa será
preenchida com servidores, terá sua propriedade name
também inicializada. Em seguida, iteramos no
servidor e verificamos com o
operador de acesso do membro se o nome do
serviço foi inicializado. Ok, agora você pode estar
se perguntando onde está a demonstração do elemento
x, esse operador. E podemos facilmente converter
o loop da seguinte maneira. Então, se comentarmos isso, poderíamos usar a
linha certa do console e simplesmente dizer que os servidores questionam ou não vamos fazer dessa
maneira. Mas por toda parte. Dessa forma. Para int eu igual a 0, eu menos de dois I mais, mais. E aqui gostaríamos de ter
os servidores ponto de interrogação, ponto interrogação, nome, ponto de interrogação
duplo e dizer que nenhum
nome foi especificado. Agora vamos deixar isso funcionar por cinco. Oh, qual é o erro? Oh, eu preciso fechá-lo. Tudo bem. Portanto, isso não está definido como um objeto. Tudo bem, vamos convertê-lo. Então, essa é basicamente
a demonstração para o operador de
propagação neural. Essa é a sintaxe para isso, e é assim que você pode usá-la. E isso era tudo que eu
queria mostrar a vocês neste vídeo. Vejo você na próxima.
26. C# Clojures Avançados e expressões da lambda: Olá e bem-vindo de volta. Neste vídeo,
falaremos sobre fechamentos com expressões
lambda. C sustenido, a capacidade
que permite que um método ou uma função referencie
a variável não local, que valores são chamados de fechamento. Esse recurso é
comumente utilizado em conjunto com a função
lambda, que nada mais são funções
anônimas
que os desenvolvedores utilizam sobre as funções principais para fornecer uma maneira de flexibilidade. Vamos falar sobre
variáveis não locais primeiro. Então, em C-Sharp, é possível
acessar uma variável fora do escopo de uma
função. E considere as variáveis normais x, pois dessa forma são chamadas de variáveis
não locais. Se você, você também pode ouvir desenvolvedores se referindo a
esse tipo de Fourier, mas como capturado muito capaz. E basicamente, o que podemos fazer para demonstrar
aqui é o seguinte. Temos uma string estática, best, quase linear, e
temos um vazio estático. Foo é o melhor. E podemos dizer que queremos que o console tenha a linha
certa para imprimir. O melhor é o melhor. Tudo bem? E devemos mover
esse buraco aqui. O que poderíamos fazer é
usar a tecla de
leitura de ponto do console e chamar a função
quem é o melhor. É basicamente assim que as variáveis
capturadas se parecem. E quais são as funções
lambda. Já tínhamos um
vídeo sobre lambdas, mas vamos tentar reiterá-lo. Portanto, há muitos
artigos sobre lambda e eles sendo encerrados. E algumas pessoas tendem a concordar de
alguma forma que existem, mas elas são apenas
parte da verdade. E eu acredito que a Índia, como o partido da oposição, as funções
Lambda podem ser
implementadas como fechamentos, mas eles não são
fechamentos em si. Isso realmente
depende do contexto em que você usa seu aplicativo
ou o ambiente. Quando você está criando comendo uma função lambda que não
usa variáveis locais, ela deve ser implementada
como fechamento. Assim, as expressões lambda podem
assumir duas formas básicas, expressões lambda e
declarações lambda. Então, para uma
expressão de exceção lambda, poderíamos dar este exemplo. Portanto, ele pega dois valores booleanos e verifica se
eles são iguais. E também podemos ter
lambdas de declaração. E eles se
parecem com isso. Então agora temos uma string e, em seguida, ela aceitaria essa
string com a mensagem. Portanto, devemos observar como fechar a chave encaracolada também
termina em um ponto e vírgula. Quando trabalhamos com lambdas de
declaração, geralmente
criamos
várias expressões, encapsulando-as
dentro de nossa função. O que gostaríamos de
fazer é dar uma curva íngreme e combinar
lambdas e fechamentos. Portanto, temos fechamento de
classe parcial estático
público, demonstração. Aqui. O que gostaríamos de
fazer é criar o vazio estático público. Lá fora. Essa será
nossa função. E dentro da função, teremos uma variável
local Norte. E diz que o lambda baseado em
fechamento. Agora vamos ter o
funk, amarrar todos eles. E gostaríamos de
usá-lo como um Lambda. E teremos
a corda local. Este é o Lambda e o Plus local de
retorno. Tudo bem. Depois disso, teremos uma
mensagem de string, que é demo. E gostaríamos de usar
a linha certa do console
para imprimir a mensagem. E no domínio, o que
poderíamos fazer é usar
a
demonstração de encerramento que está fora. E é isso aí. Então, vamos executá-lo. E aqui podemos ver como
isso foi demonstrado. Então, vemos
neste exemplo que a
variável não local não mudou. No entanto, a situação
pode nem sempre ser verdadeira. Se a variável mudar, a função de referência
será afetada. Às vezes, esse é exatamente
o caso que queremos alcançar. Por exemplo, poderíamos ter
uma função que registra a alteração
do terminal em um estado de função com uma função Lambda. Dessa forma, cada mudança
de estado resultaria
em um logotipo diferente. Então, agora podemos demonstrar
isso com fechamentos, e aqui está como faríamos isso. Então, teremos uma
variável foo, que é stem, e a função
que é chamada bar. E simplesmente retorna para a linha certa do console. E usaríamos o bar completo. E podemos mudar o
valor de foo para 20. E depois disso,
teremos um lutador que
é igual a bar. E poderíamos usar a linha certa
do console para
imprimir o lutador com o lutador. E é assim que podemos
implementar fechamentos. E tecnicamente isso é tudo que eu queria mostrar a vocês
neste vídeo. É assim que você pode usar fechamentos
com expressões lambda. Vejo você na próxima.
27. C # Avançado Foreach e enumeradores: Olá e seja bem-vindo. Neste vídeo,
falaremos sobre como
entender geradores
e enumeradores. E eu enumerador em C-Sharp. Então, um dos conceitos
é chamado de geradores, o outro é iteradores. Vamos inspecionar como essas ideias são
incorporadas no C-Sharp e verificar como você
pode utilizá-las para nossa própria vantagem. Um gerador geralmente é uma
função ou uma rotina especial implementada na
linguagem que controla o comportamento de um loop. O gerador tem
uma estranha semelhança. Duas funções que
retornam uma matriz. Eles têm parâmetros e podem ser chamados para gerar uma
sequência de tempos phi. Sem geradores,
digamos que temos uma função que retorna uma lista de inteiros de
cerca de 1 milhão de cada vez. Isso significa que as necessidades, a lista precisa ser
construída na memória, alocar espaço para
todos os valores
e, em seguida, passar esses valores
sempre que eles precisarem. Se tivermos os
recursos, tudo bem. Mas as pessoas sempre
se esforçam para descobrir algo para esses
tipos de problemas. E os geradores nasceram. E os iteradores são como a contrapartida
dos geradores. E o conceito
remonta a 1974. Para a linguagem de programação C. Por design, um
iterador deve permitir que o programador atravesse contêineres
específicos, e é mais comumente
usado para listas. Então, vamos ver um exemplo
em implementação, temos uma lista de
strings a serem iteradas, que é uma nova string de lista. E para ser iterado
tem uma função add. E podemos dizer que programar é divertido. Agora, podemos converter essa lista
em um gerador de forma muito simples. Poderíamos simplesmente
dizer que é um
I e uma string numérica. E, basicamente, precisamos
mudar isso dessa maneira também. Então eu enumero arco, corda e aguento. Nós temos esse. E isso deve ser
iterado. E precisamos mudar
o outro também. Então, eu me curvo a ser iterativo. E o que podemos fazer agora é pegar o elemento for-each loop e dizer string em I inumerable e usar o elemento de linha direita
do console. E se formos em frente e lermos a
chave para aguardar a saída, é
isso que
vamos ver. Dessa forma, alteramos
a lista para um gerador, que ela tenha uma pegada de
memória menor. E aqui, basicamente, não
há declaração de quebra. E, no entanto, não é infinito,
então ele sabe como parar quando
gostamos de esgotar então ele sabe como parar quando gostamos de esgotar a lista que
gostaríamos de iterar. E podemos ver o chá dar um exemplo
prático ou mais prático também. Por isso, gostaríamos de criar um
pequeno aplicativo que possa processar os números se forem
ímpares ou até diferentes. O enumerador ocular
nos fornece uma solução elegante, seja, envolve
dois métodos estáticos. Portanto, o primeiro
método estático seria esse. E precisaremos
usar o encadeamento do sistema. E o que gostaríamos fazer é ter o processo de
auditoria também. Então, até mesmo processe qual processo. Então lá vamos nós. Então, o que acontece aqui? Nós tomamos um
numerador ocular como argumento. E se a corrente for 0, dizemos que a lista foi processada saindo do que
esperar por cinco segundos. Se for o módulo dois, então dizemos que o número
está até chamando processador. E lá vamos nós. Então isso é para números pares
e ímpares. E agora dentro do nosso principal, o que podemos fazer é
criar uma lista int, que é chamada myList. E esta é uma nova
lista de inteiros com valores de
Dan para I
vai de 0 a I, menos de dez I mais mais. E gostaríamos de usar o my list dot add
para adicionar novos elementos. E depois disso,
teremos o enumerador de olhos. E isso vai
levar um número inteiro. Minha lista em m é igual a
minha lista, pegue um numerador. Minha lista em num, vá em seguida. Processe ou mylist the
num, e pronto. Então, vamos dar uma chance. E como você pode ver, a saída mostra que a
lista foi processada saindo. Então é assim que você pode usar para cada
enumerador de olhos em C-Sharp. Vejo você na próxima.
28. C # Advanced Static vs membros de instâncias: Bem-vindo. Neste vídeo, falaremos
sobre como você pode distinguir membros estáticos
e membros de instância. Portanto, a
programação orientada a objetos gira em torno de dois termos principais em. Um é objeto e o
outro é instâncias. Existem diferentes ideias
teóricas que a
linguagem de programação específica implementa. Neste guia,
daremos
uma olhada em membros estáticos e de instância. Vamos decidir os termos
e o que eles são, como você pode utilizá-los
em algumas regras muito simples. Então, distinguimos também três
tipos de números diferentes. Podemos ter
campos ou propriedades estáticas, métodos
estáticos e classes
estáticas. Então, vamos começar com as aulas. O que há com as classes
estática e não estática
são classes estáticas ou não estáticas. E temos classe não estática. Ele pode conter métodos, propriedades e até eventos. E você pode chamar isso mesmo sem instanciar a classe. Então, por exemplo, vamos
criar um projeto para isso. Tem esse não. Então, por exemplo, vamos criar uma classe que
chamaríamos de não estática. E aqui vamos ter uma
string estática pública, sem instância. E na linha de
gravação de pontos do console, imprimimos. Eu não preciso saber. Dan Shi é mostrado. Espera aí. Devemos ser devolvidos. Tudo bem. E o que também podemos fazer é,
dentro de nossa classe interna, definirmos nossa string pública. Outra instância. E aqui
não retornamos nenhuma instância aqui. Qualquer um. Se você for para o principal, depois de ter a chave certa. O que podemos fazer é usar
a linha direita do console, a impressão, o resultado
da função
da função não estática sem
instância. E também a linha certa do console. E outro não assim. Então, basicamente, se
executarmos esse exemplo, você verá que
chamamos a função
da classe sem instanciação. Sem usar o modificador
public, podemos chamar as
estrelas conhecedoras da classe demo
estática e não estática, e não herdamos nada
disso em nossa classe principal. E você também deve saber a palavra-chave public quando
invocamos outra instância
do método de dentro de nossa classe principal e nível de
acessibilidade
está correto desta vez. Basicamente. Em outra redação, quando falamos sobre
os membros da instância, falamos sobre os membros
da classe que não podem ser chamados acessados sem
instanciar a classe. Aqueles que podem ser acessados
são chamados de membros. Então, por exemplo, se eu der esse
número de string público não estático igual a qualquer coisa, então podemos acessar este. E quanto aos métodos estáticos? Por exemplo, se
tivermos esse exemplo, isso será chamado de membros
estáticos, um método estático. E quando você define
um método estático, permitimos o acesso desse
método somente a membros estáticos da classe e não podemos
acessar membros da instância. E se eu fosse acessar essa variável membro a
partir do método estático, ela ainda funcionaria bem. Então, agora temos que falar sobre propriedades ou campos
estáticos. Portanto, quando temos um campo estático, precisamos ter em
mente que esse campo identifica apenas um
local de armazenamento na memória. E não importa quantas
instâncias criemos isso será apenas uma
cópia de um campo estático. Na maioria das vezes, como resultado do
natural de sua natureza, propriedades
estáticas são
usadas para armazenar dados
que devem ser compartilhados por
todas as instâncias da classe. E se você quiser um
exemplo para isso, podemos criar uma classe
chamada counter. Aqui teríamos o público estático int down Cs igual a 0
e contador público. O que gostaríamos de fazer é
usar as instâncias mais igual a um para aumentar
o contador de instâncias. E quando vamos em frente e criamos uma nova instância a partir do balcão, o que podemos fazer é usar
a linha certa do console. Imprima o número
de instâncias. Aqui, o que faremos é
usar o número da classe do contador, ou melhor, instâncias para
imprimir o número de instâncias. Atualmente, se executarmos essa
solução, veremos uma. Mas se você criar mais
algumas instâncias. Então, digamos que esta seja a contagem 123. E se formos imprimir
a nova contagem de instâncias, veremos que temos um
total de quatro instâncias. E basicamente é isso. Então é isso que eu
queria mostrar a vocês neste vídeo. Vejo você na próxima.
29. Inferência de tipo avançado C #: Olá e bem-vindo de volta. Neste vídeo, vamos
falar sobre
financiamento de digitação c-sharp. C sustenido é uma linguagem fortemente
digitada. É para uma declaração
é chamada de explícita. E isso significa que temos
que especificar uma nova variável. Caso contrário, o compilador
lançará um anúncio ou, com a versão
três do C-sharp, uma nova palavra-chave foi introduzida e é chamada voir. E isso permite que
os desenvolvedores
armazenem qualquer tipo de valor de forma implícita, o que
significa que o
compilador decidirá por nós durante o tempo de compilação quando executamos a primeira
atribuição acontece o que se tornar como um
tipo dessa variável. E pode ser facilmente
integrado ao link Q, que é a consulta
integrada à linguagem. Antes da introdução
da inferência de tipo, definiu
explicitamente o que será uma string ou
inteiro ou o que quer que seja antes do tempo de compilação
composto. Então, definimos uma string com
o valor padrão e assim por diante. E agora temos que
falar sobre link q. Então q significa consulta
integrada à linguagem. É um conjunto de tecnologias
baseadas na integração de recursos de consulta
diretamente na linguagem C Sharp. É muito semelhante à consulta. E o objetivo era
filtrar os dados com base em critérios
específicos e suportar maioria dos tipos de dados Slack, sequel, Zemo e assim por diante. E vamos criar um exemplo que supostamente
demonstre exatamente isso. Então, vamos criar um servidor de classe
pública. Dentro da classe pública, teremos um nome String
público, que tem um getter e setter. E teremos um sistema operacional
String público com o getter e setter. E depois disso, o que
gostaríamos de
fazer para criar uma nova energia solar. E isso basicamente
não é apenas um novo servidor, mas a lista de servidores. E gostaríamos de ter
isso como uma nova lista de servidores. Aqui. O que gostaríamos de
fazer é o seguinte. Então, queremos instanciar
esses servidores. Vamos lá. E nós temos um novo servidor, que vai ter
um nome, que é como, o tear e
um sistema operacional, que será quando? 2019. E faremos um pouco mais. Tão grande garoto. Este será um modelo CentOS
oito e Ricky , que será nove. E agora o que podemos
fazer é criar uma consulta ao servidor, que será
do servidor nos servidores. E gostaríamos de
ter o sistema operacional do servidor filtrado para o IBM nove e fechar isso. Portanto, temos essa lista e temos que adicionar o novo servidor selecionado, o sistema operacional do servidor de nomes e fechá-lo. E depois disso, podemos usar
o servidor foreach var, consulta do
servidor e simplesmente usar o servidor da linha direita do console. E vamos dar
a ele que os cones têm cerca três chaves e executá-lo. Agora, como você pode ver, aqui, temos o resultado do filtro. E o que vemos aqui? Estamos usando dois namespaces
adicionais. Um é chamado genérico e
o outro é fila vinculada. E o primeiro nos fornece a implementação
da estrutura de dados de lista, onde armazenamos nossos servidores. E os segundos anúncios, os recursos de link para
o
nosso aplicativo após a inicialização da
lista com os servidores. E é aqui que
a mágica acontece. Então, primeiro definimos nossa variável que contém
a consulta é arts, e então a consulta é feita. Que procura servidores
mais baratos do que ou não mais baratos, mas sim o
sistema operacional sendo WAN 19. A palavra-chave walk nos
permite decidir o tipo de corpo
durante o tempo de execução. E tecnicamente isso é tudo eu queria mostrar a
vocês neste vídeo. Vejo você na próxima.
30. Funções locais avançadas: Olá e bem-vindo de volta. Neste vídeo,
falaremos sobre funções locais
em C-Sharp. Assim, as funções locais, esse recurso tornou-se parte do C-sharp
com a versão 7. E a ideia por trás desse recurso é a
definição de uma função. Fizemos outra função. E é semelhante à forma como os decoradores
Python funcionam. Se você estiver familiarizado com o conceito e
quiser reformulá-lo, poderíamos dizer que a função
local é
uma função privada de uma
função e seu escopo. E está limitado à função dentro da qual foi definido. Dissecaremos esse tópico
mais adiante neste vídeo. Portanto, o tipo de função
de pesquisa se assemelha ao tipo
da função de contêiner. No entanto, não há uma aplicação
estrita
de regras do lado do compilador. E quando temos
uma função local, também
podemos usar modificadores assíncronos e
inseguros. Portanto, inseguro refere-se a ponteiros em
C sustenido em assíncrono está se referindo
a assíncrono. E lugares comuns onde as funções
locais são definidas. Nossos construtores de métodos, fonte de acesso à
propriedade, acessadores de
eventos , expressões
lambda, analisadores ou
destruidores
phi e funções locais. E um recurso muito útil da função local
é que eles permitem exceções
apareçam imediatamente quando estamos usando iteradores, por exemplo, exceções
só aparecem quando as enumeramos. Então, vamos criar uma
pequena demonstração. Aqui. Gostaríamos de ter
uma mensagem vazia, string, digamos. E usamos o console. Certo? Linha. Diga. Vamos usar os cones ou a tecla de
leitura para obter informações. Agora, o que gostaríamos de fazer é dizer
a mensagem, bem-vindo. E se o
executarmos, veremos o
seguinte resultado. Agora, essa é basicamente a forma mais simples
de funções locais. No nosso caso, temos a
função chamada message, que pega uma string
como argumento e envia para o
console a mensagem. E vamos criar outra demonstração
com escopos variáveis. Então, por exemplo,
temos aqui int k igual a 11 e o duplo j é
igual a noventa e nove ponto nove. E teríamos
o escopo vazio. E usamos a
linha certa do console para imprimir o nome. O valor do nome de. Isso deve ser uma string f. E passaríamos dois
argumentos também. Então, em X em Y está X
e Y. E gostaríamos de usar
o K e o J também. Vamos lá. K e J. J e K. E não precisamos desse nome. Na verdade, precisávamos disso. Então, agora o que gostaríamos de
fazer é usar o escopo. Vamos fazer disso uma string em
vez de 1299 e apenas executar. Então, como você pode ver aqui, as variáveis locais chamadas k e j são acessíveis
para a função conforme são definidas dentro
da função de contêiner. E o que gostaríamos de
fazer é criar uma função
genérica. Então anule a função genérica. E nós teremos o
valor com o valor X. E vamos para este. E nós teríamos que os cones à
direita é igual a este como o anterior. E chamaremos essa função. Nove, 11 que se você executá-lo, o valor de x é 11. Funções genéricas combinam
tipo, segurança e eficiência. E eles são frequentemente
usados com coleções e métodos que
operam neles. E também podemos referenciar
o parâmetro externo na função
local que são
declarados no mesmo escopo. Então, por exemplo,
poderíamos criar o vazio my string x out string S. E S é igual a cifrão. Esse é o único. E agora teríamos a
string message igual a null. E teríamos a mensagem My
out 12 and out, a chamada de função
e simplesmente usaríamos o console com a mensagem da linha
certa. Então, agora nós o executamos. Você pode ver que o
valor de x é 12º. A atmosfera é variável, captura a mensagem e
trabalha em conjunto com a string como argumento
da função. E poderíamos usar também a palavra-chave params void, meus antebraços, armas de fogo na matriz. E cones. Entendi a linha brilhante. E aqui poderíamos dizer que obteve o número da tubulação. E teríamos elemento. E para cada elemento na matriz. Dessa forma, nosso
loop for parece bom. E teríamos o teste, que é um novo array inteiro
que tem o 123456789. E agora podemos usar a
parte de baixo ontem. E lá vamos nós. Então, basicamente,
é assim que você pode usar funções locais em C-Sharp. Vejo você na próxima.
31. C# Advanced Custom accessors de eventos: Olá e bem-vindo de volta. Neste vídeo, vamos
dar uma olhada em como você pode escrever
acessadores de eventos personalizados em C-Sharp. Portanto, para entender o eixo de eventos do
cliente, precisamos
esclarecer por que eles são necessários e os casos de uso. Aqui vamos apresentar o conceito de eventos
e dar uma olhada
nos eventos e acessadores que podem ser usados para
interagir entre as aulas. E o que são eventos. Então, vamos dar um exemplo animado. Temos uma interface gráfica
do usuário que consiste em botões, texto, caixas, rótulos e assim por diante. Cada componente é
composto por sua própria classe. Cada aula fornece
funcionalidade. Por exemplo, você pode
digitar na caixa de texto, clicar em um botão e assim por diante. E categorizamos as aulas por editores
ou assinantes. O editor é uma classe que envia ou aumenta os eventos. E o assinante é
aquele que recebeu o, recebe o evento com
base em suas ações específicas. Portanto, existem algumas
regras para os eventos. O editor determina
quando um evento é gerado, o assinante determina
qual ação é tomada quando um evento específico é disparado
para o qual ele está inscrito. Eventos com nossos assinantes nunca
são levantados. E os eventos são acionados principalmente
devido às interações
do usuário no aplicativo da web ou na interface
gráfica do usuário. Por padrão, o evento tem vários assinantes e
faz com que ele lide com manipuladores invocados de forma
síncrona,
a menos que definido de forma
assíncrona e assíncrona. Os eventos são baseados
na classe base do manipulador de eventos, delegado e
logs de eventos. Para criar um evento, precisamos criar um
delegado que contenha os detalhes dos
assinantes de um evento
e criar um
evento público que seja
visível externamente para uma classe e usado
para criar assinaturas. Em seguida, criamos o método em uma classe que
acionará o evento em si. Então, por exemplo, vamos
fazer o seguinte. Vamos chamar essa
classe pública de máquina. E supõe-se que essa
máquina de classe pública tenha algo chamado
private int utilization, que será 0,
private int safe utilization, que será o nível de
utilização sob o qual a máquina é segura
para ser operada. E teremos um delegado
público. Limite de estresse vazio x
c manipulador de eventos, que terá a
origem do objeto e os argumentos de evento E. E teremos um manipulador de limite de estresse de
evento público excedido. Teremos um público
que devemos anular devido ao estresse. Nível. C fez argumentos de evento E. E basicamente o que
gostaríamos de fazer é ter o limite de estresse
excedido o ponto de interrogação que. Invocar. Este E. Vamos trazê-lo aqui para que
fique mais visível. E teremos um int público, quatro meses, que
terá o getter. E isso retornará a utilização. E teremos
o vazio estático. Máquina. O estresse
limitará x c did object, source event args e.
E gostaríamos de
ter a máquina, que é igual à fonte
da máquina. Uns. Tudo bem, linha. Aviso de nível de estresse. Você gostaria
que o Mac ruim por meses e
a pessoa assinasse. Agora, o que podemos fazer é criar o
teste público de estresse vazio, utilização interna. E agora gostaríamos de, eu tenho a utilização antiga igual à utilização de sublinhado. E a
utilização do
sublinhado deve ser aumentada com
a nova utilização. E se a utilização antiga for menor que igual
para economizar utilização é
maior do que a utilização segura. Então podemos chamar o nível de estresse excedido novos cães. Tudo bem, então, basicamente,
esse
será o teste de estresse
para nossa turma. E em nossa função principal. O que podemos fazer é
criar uma nova máquina. E podemos estranhar novo
manipulador de eventos de limite de estresse para a máquina. Limite de estresse. Vamos lá. Z fez. E gostaríamos de
usar os poemas nessa linha certa para dizer
que a utilização é, esta vai ser
uma máquina de f string que forma mal íons
com um sinal de porcentagem. E podemos usar a máquina. Aquele teste de estresse. Digamos que isso
vai ser 60. Escreveremos
a utilização e, em
seguida, criaremos outro
teste de estresse para o quinto. E vamos fazer o 75 e usar os fóruns ou concordar em
esperar pelo prompt. Agora, se executarmos esse exemplo, você pode ver que
a utilização não vai mudar. Quero dizer, isso vai mudar, mas assim que tivermos
excedido a utilização, recebemos o aviso para
que o evento personalizado seja gerado. Então, esse foi basicamente um exemplo que mostra
como você pode escrever seus
acessadores de eventos personalizados em C-Sharp. Vejo você na próxima.
32. Conversões definidas por usuário avançado C #: Olá e bem-vindo de volta. Neste vídeo, falaremos sobre como você pode escrever
conversões personalizadas definidas pelo usuário em C-Sharp. Foram essas
conversões em C-Sharp ou todos os dias de pedestres
para a maioria dos desenvolvedores. E nós o usamos para verificar se
as entradas sólidas desafiaram o fluxo de trabalho de nossa aplicação. Eles são convertidos integrados, que são conversões incorporadas e recursos de suporte em C Sharp que
permitem manter a flexibilidade e a
consistência em todo o aplicativo por padrão, existem dois
tipos principais de conversões. Um é chamado de x mais c, o outro é implícito. C sustenido também fornece
uma maneira de você
definir suas próprias conversões. Vamos dar uma olhada nas conversões
explícitas. Então, por exemplo,
temos um flutuador Pi, que é três para F. E
temos um duplo B pi, que vai ser por. E podemos usar a linha certa
do console, a impressão por d pi. Vamos dar uma olhada na saída. Então, como você pode ver, no primeiro caso, temos os três
pontos 14 como valor. E o terceiro. O segundo caso é um
pouco mais longo. Então, basicamente, o que vemos é como o flutuador
é convertido em duplo. Essa é a diferença
entre a precisão. É por isso que vemos valores
diferentes. E o que também podemos
fazer é basicamente seguir em frente e vamos chamar
isso de E pi, d Pi. E aqui apenas dizemos que queremos ter um valor duplo. E isso vai
ser o três que 14. E gostaríamos de criar
uma versão flutuante disso. E F DEP. O que gostaríamos de
fazer é usar o flutuador em d, d, p, y. E agora podemos escrever
esses valores. Vamos executar nosso exemplo. Agora, como você pode ver, usamos a conversão
explícita para criar os novos valores. Agora, o que podemos fazer é
dar uma olhada em como você pode definir suas próprias conversões
personalizadas. Então, por exemplo, temos a classe pública
chamada conversões. E temos o tipo personalizado de
classe pública. E este vai ter um número int público com
seu getter e setter. O bool público, magia,
getter e setter. E teremos um operador
estático int, valor int de tipo
personalizado. Dentro dessa função,
gostaríamos de retornar um novo tipo personalizado com
o número igual ao valor. E a magia era falsa. E
aquele operador booleano público, desculpe, n. Depois disso, podemos definir nosso operador estático público
com marcadores X, int, tipo personalizado, magic. E gostaríamos de voltar
do número mágico. Tudo bem, agora
temos nossa própria classe e podemos criar um número inteiro
que é chamado de número. E vai
ter o valor três. Depois disso, podemos criar um tipo mágico personalizado
igual a um número. E podemos usar a linha certa do console
para imprimir de int um número em magia com valor número mágico. E se fecharmos essa
linha e executá-la, você pode ver que
convertemos o número inteiro três em uma
conversão definida pelo usuário, que tem o valor de três. Então, tecnicamente
, é assim que você pode criar suas próprias
conversões personalizadas definidas pelo usuário no C-Sharp. Vejo você na próxima vez.
33. C # Avançou o Fim: Bem-vindo. Este é o meu
vídeo final desta série. Aqui na série, você aprendeu muitas
técnicas úteis em C-Sharp, como você pode aprimorar
seu aplicativo, como você pode implementar recursos
avançados que permitirão que você construa
mais robustos aplicativos. Vimos em
muitos exemplos como você pode utilizar
todo o arsenal que C-sharp tem para fornecer a
você para tornar seus programas ou aplicativos
mais bem-sucedidos. E todos esses
exemplos serão carregados em um repositório do GitHub que você
poderá clonar e reproduzir os exemplos que você vê nos vídeos. Vejo você na próxima. E espero que isso tenha sido
informativo para você. E eu gostaria de
agradecer por assistir. Tchau.