Eventos
17 de mar., 21 - 21 de mar., 10
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agoraNão há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
Observação
Este artigo é uma especificação de recurso. A especificação serve como o documento de design para o recurso. Ele inclui alterações de especificação propostas, juntamente com as informações necessárias durante o design e o desenvolvimento do recurso. Esses artigos são publicados até que as alterações de especificação propostas sejam finalizadas e incorporadas na especificação ECMA atual.
Pode haver algumas discrepâncias entre a especificação do recurso e a implementação concluída. Essas diferenças são capturadas nas notas pertinentes da reunião de design de idioma (LDM).
Você pode saber mais sobre o processo de adoção de speclets de recursos no padrão de linguagem C# no artigo sobre as especificações de .
Problema do especialista: https://github.com/dotnet/csharplang/issues/2951
Permite que constantes sejam geradas a partir de cadeias de caracteres interpoladas do tipo constante de string.
O código a seguir já é legal:
public class C
{
const string S1 = "Hello world";
const string S2 = "Hello" + " " + "World";
const string S3 = S1 + " Kevin, welcome to the team!";
}
No entanto, houve muitos pedidos da comunidade para tornar o seguinte também legal:
public class C
{
const string S1 = $"Hello world";
const string S2 = $"Hello{" "}World";
const string S3 = $"{S1} Kevin, welcome to the team!";
}
Essa proposta representa a próxima etapa lógica para a geração de cadeia de caracteres constante, em que a sintaxe de cadeia de caracteres existente que funciona em outras situações é feita para funcionar para constantes.
A seguir, representam as especificações atualizadas para expressões constantes nesta nova proposta. As especificações atuais das quais isso foi diretamente baseado podem ser encontradas em §12.23.
Uma expressão constante é uma expressão que pode ser completamente avaliada em tempo de compilação.
constant_expression
: expression
;
Uma expressão constante deve ser o literal null
ou um valor com um dos seguintes tipos: sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
, char
, float
, double
, decimal
, bool
, object
, string
ou qualquer tipo de enumeração. Somente os seguintes constructos são permitidos em expressões constantes:
null
).const
de tipos de classe e estrutura.const
ou variáveis locaischecked
e unchecked
+
, -
, !
e ~
.+
, -
, *
, /
, %
, <<
, >>
, &
, |
, ^
, &&
, ||
, ==
, !=
, <
, >
, <=
e >=
binários, desde que cada operando seja de um tipo listado acima.?:
.${}
, desde que todos os componentes sejam expressões constantes do tipo string
e todos os componentes interpolados não tenham especificadores de alinhamento e formato.As seguintes conversões são permitidas em expressões constantes:
Outras conversões, incluindo boxing, unboxing e conversões de referência implícita de valores que não sejam nulos, não são permitidas em expressões constantes. Por exemplo:
class C
{
const object i = 5; // error: boxing conversion not permitted
const object str = "hello"; // error: implicit reference conversion
}
a inicialização de i é um erro porque uma conversão de boxing é necessária. A inicialização do str é um erro porque é necessária uma conversão de referência implícita de um valor não nulo.
Sempre que uma expressão atende aos requisitos listados acima, a expressão é avaliada em tempo de compilação. Isso é verdadeiro mesmo se a expressão for uma subexpressão de uma expressão maior que contenha construções não constantes.
A avaliação em tempo de compilação de expressões constantes usa as mesmas regras que a avaliação em tempo de execução de expressões não constantes, exceto quando a avaliação em tempo de execução teria gerado uma exceção, a avaliação em tempo de compilação faz com que ocorra um erro de tempo de compilação.
A menos que uma expressão constante seja explicitamente colocada em um contexto unchecked
, estouros que ocorrem em operações e conversões aritméticas de tipo integral durante a avaliação em tempo de compilação da expressão sempre causam erros de tempo de compilação (§12.23).
Expressões constantes ocorrem nos contextos listados abaixo. Nesses contextos, ocorrerá um erro em tempo de compilação se uma expressão não puder ser totalmente avaliada em tempo de compilação.
case
de uma instrução switch
(§13.8.3).goto case
(§13.10.4).Uma conversão de expressão constante implícita (§10.2.11) permite que uma expressão constante do tipo int
seja convertida em sbyte
, byte
, short
, ushort
, uint
ou ulong
, desde que o valor da expressão constante esteja dentro do intervalo do tipo de destino.
Esta proposta adiciona complexidade adicional ao compilador em troca de aplicabilidade mais ampla de cadeias de caracteres interpoladas. Como essas cadeias de caracteres são totalmente avaliadas em tempo de compilação, os valiosos recursos de formatação automática de cadeias de caracteres interpoladas são menos neccesários. A maioria dos casos de uso pode ser replicada em grande parte por meio das alternativas abaixo.
O operador +
atual para concatenação de cadeia de caracteres pode combinar cadeias de caracteres de maneira semelhante à proposta atual.
Quais partes do projeto ainda estão indecisas?
Vincule às notas de design que afetam essa proposta e descreva em uma frase para cada uma quais mudanças elas causaram.
Comentários do C# feature specifications
O C# feature specifications é um projeto código aberto. Selecione um link para fornecer comentários:
Eventos
17 de mar., 21 - 21 de mar., 10
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agora