Почему в C # нет метода константного члена и константного параметра?

Spinner spnLocale = (Spinner)findViewById(R.id.spnLocale);

spnLocale.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
        // Your code here
    } 

    public void onNothingSelected(AdapterView<?> adapterView) {
        return;
    } 
}); 

Примечание: Помните одну вещь.

Событие Spinner OnItemSelectedListener будет выполнено дважды:

  1. Инициализация Spinner
  2. Пользователь выбран вручную

Попытайтесь различить эти два по используя переменную флага.

16
задан Peter Mortensen 15 January 2017 в 11:49
поделиться

2 ответа

Во-первых, не требуется, чтобы мы указали причину, по которой не не реализовали функцию. Особенности чрезвычайно дороги; должно быть обоснование для реализации функции, а не обоснование для , а не реализации функции.

Во-вторых, C # не является клоном C ++ или C. Просто потому, что функция есть на каком-то другом языке, не является причиной для ее помещения в C #.

В-третьих, «const» глубоко трагически нарушен в C и C ++. «const» не дает вам гарантии, на которую вы действительно можете положиться. Если вы вызываете метод, который принимает константную ссылку, то у вас нет никаких гарантий, что метод соблюдает константность; у метода есть много способов изменить константную ссылку. Если вы являетесь потребителем константной ссылки, то у вас нет гарантии, что базовый объект на самом деле не будет мутировать произвольно. Поскольку контракт не применяется ни для вызывающей, ни для вызывающей стороны, он намного слабее любой другой гарантии, которую мы хотели бы дать в системе типов. Мы не хотели бы копировать такую ​​сломанную систему.

В-четвертых, введение константности в систему типов CLR означает, что каждый язык должен будет использовать ту же самую реализацию константности; так как разные языки имеют разное значение для константности, это сделало бы труднее перенести больше языков в CLR, а не легче .

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

27
ответ дан 30 November 2019 в 16:41
поделиться

Есть достойная статья здесь Стэна Липпмана.

2
ответ дан 30 November 2019 в 16:41
поделиться