Почему активатор c # может инициализировать структуру без предоставления параметров конструктора [duplicate]

Интерпретированные строковые литералы представляют собой последовательности символов между двойными кавычками "", используя (возможно многобайтовое) кодирование UTF-8 отдельных символов. В UTF-8 символы ASCII имеют один байт, соответствующий первым 128 символам Юникода. Строки ведут себя как кусочки байтов. Руна представляет собой целочисленное значение, определяющее кодовую точку Юникода. Поэтому

package main

import "fmt"

func main() {
    fmt.Println(string("Hello"[1]))              // ASCII only
    fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8
    fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8
}

Выход:

e
e
界

Чтение:

Перейти к разделу Спецификация языка программирования в Конверсии .

Блог Go: строки, байты, руны и символы в Go

12
задан Praveen Sharma 22 February 2009 в 22:59
поделиться

2 ответа

Я не могу иметь явный конструктор без параметров, только неявный, который инициализирует все члены по умолчанию.

Хотя CLR позволяет это, C # не позволяет структурам иметь параметр без параметров конструктор. Причина в том, что для типа значения компиляторы по умолчанию не генерируют конструктор по умолчанию, и не генерируют вызов конструктору по умолчанию. Таким образом, даже если вам удалось определить конструктор по умолчанию, он не будет вызван, и это только смутит вас. Чтобы избежать таких проблем, компилятор C # запрещает пользователю определять конструктор по умолчанию. И поскольку он не генерирует конструктор по умолчанию, вы не можете инициализировать поля при их определении, ...

15
ответ дан H.B. 19 August 2018 в 13:56
поделиться

Достаточно разумное объяснение можно найти по адресу: http://en.csharp-online.net/CSharp_FAQ:_Why_must_struct_constructors_have_at_least_one_argument

Цитата: ".NET. Common Language Runtime (CLR) не гарантирует, что вызовутся конструкторы без параметров. Если структурам было разрешено иметь конструкторы без параметров без параметров, то подразумевалось, что конструкторы по умолчанию всегда будут вызываться. Тем не менее, CLR не дает такой гарантии. "

0
ответ дан petr k. 19 August 2018 в 13:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: