невозможно присвоить значение так как он является группа методов

«Невозможно присвоить группе методов неявно типизированную локальную переменную» Создание калькулятора

Второй пост здесь, поэтому я недавно начал свой вычислительный курс, и мы работаем над С#. Я все время понял все, и у нас есть наш первый проект, над которым мы должны работать, однако я был здесь в тупике, я покажу вам все код для чтения, тогда я оторвусь внизу до той части, где обнаружена ошибка:

Итак, есть код формы, и вот ошибка, я прокомментирую точную строку

Есть ошибки, есть ли что-то еще, что вы можете видеть в этом не так? Или оптимизация? Это только для умножения, но как только я это сделал, я могу легко скопировать его, спасибо 🙂

Ошибка в точности, как говорит компилятор. Вы не можете использовать var при инициализации с помощью группы методов. Из документации, с моим акцентом:

var может использоваться только тогда, когда локальная переменная объявляется и инициализируется в той же самой инструкции; переменная не может быть инициализирована нулем, или группе методов или анонимной функции.

Вы должны явно указать тип переменной, если хотите инициализировать ее группой методов.

Однако довольно очевидно, что вы действительно не хотите назначать группу методов локальной переменной. Именно то, что вы пытаетесь сделать, я не могу отличить здесь.

Мне кажется, что вы не совсем поняли программирование, основанное на событиях. Вам нужно подождать, пока пользователь нажмет кнопку, а затем ответьте на эту кнопку, щелкнув в обработчике событий. Что нужно знать о обработчиках событий, так это то, что система их вызывает, а вы этого не делаете.

Источник

Невозможно присвоить значение так как он является группа методов

Опытный

Профиль
Группа: Участник
Сообщений: 283
Регистрация: 14.11.2007
Где: Украина

Репутация: нет
Всего: нет

Код
public interface IView
<
///
/// Вывод градусов Фаренгейта
///
void SetFarenheit(double value);

///
/// Вывод градусов Цельсия
///
void SetCelsius(double value);

///
/// Ввод нового значения градусов
///
double InputDegree

///
/// Событие ввода значения по Фаренгейту
///
event EventHandler SetFarenheit;

///
/// Событие ввода значения по цельсию
///
event EventHandler SetCelsius;
>

Тип «MVCExample.IView» уже содержит определение для «SetFarenheit» E:\С#\MVCExample\MVCExample\IView.cs 18 41 MVCExample
Тип «MVCExample.IView» уже содержит определение для «SetCelsius» E:\С#\MVCExample\MVCExample\IView.cs 19 41 MVCExample

Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67

Опытный

Профиль
Группа: Участник
Сообщений: 283
Регистрация: 14.11.2007
Где: Украина

Репутация: нет
Всего: нет

Код
class Presenter
<
private Model _model=new Model();
private IView _view;

public Presenter(IView view)
<
_view=view;
_view.SetCelsius+=new EventHandler (OnSetCelsius); //Невозможно присвоить «SetCelsius» значение, поскольку он является «группа методов»
_view.SetFarenheit+= new EventHandler (OnSetFarenheit);//И тут так же

private void OnSetFarenheit(object sender, EventArgs e)
<
_model.valueFanrenheit=_view.InputDegree;
RefreshView();
>
private void OnSetCelsius(object sender, EventArgs e)
<
_model.valueCelsius=_view.InputDegree;
RefreshView();
>

private void RefreshView()
<
_view.SetCelsius(_model.valueCelsius);
_view.SetFarenheit(_model.valueFanrenheit);
>
>

Опытный

Профиль
Группа: Участник
Сообщений: 283
Регистрация: 14.11.2007
Где: Украина

Репутация: нет
Всего: нет

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

[ Время генерации скрипта: 0.1075 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

Невозможно присвоить ‘ ‘, потому что это новичок группы методов

Я занимаюсь на сеттеров и геттеров, получил это сообщение об ошибке:

Невозможно назначить «GetnewName», потому что это «группа методов»

4 ответа

Вам нужно установить имя, используя метод SetName.

Ты используешь GetnewName как если бы это было свойство, но вы определили его как пару методов.

Синтаксис свойства объединяет геттер и сеттер под одним именем. Затем C# перенаправляет присвоения установщику и читает метод получателя:

Замечания: get => name Выше используется новый синтаксис. Старый синтаксис для того же был get

Вы не можете присвоить строку методу, это вызывает ошибку. В C# мы не используем методы получения и установки, как в Java или C++. Вместо этого у нас есть свойства, которые мы используем. Вы можете назначать и читать значения, как если бы они были полями, но у них есть специальные методы, называемые методами доступа. Вы должны изменить свой класс следующим образом:

Тогда вы можете использовать его как:

Кажется, вы хотите этого:

get; будет автоматически возвращать значение вашего свойства без необходимости в частном вспомогательном свойстве, и, как правило, вы можете использовать установщик внутри свойства для установки значения, но так как вам также нужно передать параметр, это похоже на создание установщика частный и создание отдельного метода, чтобы фактически установить его в соответствии с вашими потребностями.

Источник

Я только начал работу с C#. Сейчас делаю тест. Структуру решил делать: есть массив с ключом к тесту, при нажатии на правильный объект в переменную записывалось +1.

Имеется:1) 6 объектов Radiobutton; 2) массив который является ключом теста testKey =<'1','1','3','2','3'. >
Задача: При нажатии на объект происходит проверка, нужный ли номер объекта был нажат.

Вот никак у меня не получается связать номера оъектов нажатый в нужный момент к ключом-правильным вариантом ответа.

Как связать radiobutton и label?
Здравствуйте. Как связать radiobutton и label? Нужно что бы при выборе одного из radiobutton.

Связать radiobutton-ы материнских плат и процессоров
На 1-ой форме есть 5 штук мат. плат radiobutton. На 2-ой форме есть 5 штук процессоров radiobutton.

Нужно связать RadioButton и столбцы в таблице?
Всем привет. Нужно, чтобы при выборе определенного RadioButton’а и введении соответствующего.

Связать текстбокс с массивом
Ребята, помоги пожалуйста начать делать. Не могу понять, как связать текстбокс с массивом, чтоб.

Связать StringGrid с массивом
Уважаемые форумчане! 🙂 Столкнулась с такой проблемой : Компонент StringGrid может изменяться в.

Как связать элементы листбокса с массивом
есть листбокс с элементами (дата, серверы, статус и тд) надо связать соответствующие элементы с.

Checkbox index или как связать чекбокс с массивом
Как связать чекбокс с частью объектов массива. Массив от 0-20. Доступ к объектам через индексы.

Источник

Карманная книга по TypeScript. Часть 7. Классы

Мы продолжаем серию публикаций адаптированного и дополненного перевода «Карманной книги по TypeScript «.

Обратите внимание: для большого удобства в изучении книга была оформлена в виде прогрессивного веб-приложения.

Члены класса (class members)

Вот пример самого простого класса — пустого:

Такой класс бесполезен, поэтому давайте добавим ему несколько членов.

Поля (fields)

Поле — это открытое (публичное) и доступное для записи свойство класса:

Поля могут иметь инициализаторы, которые автоматически запускаются при инстанцировании класса:

—strictPropertyInitialization

Настройка strictPropertyInitialization определяет, должны ли поля класса инициализироваться в конструкторе.

Обратите внимание, что поля классов должны быть инициализированы в самом конструкторе. TS не анализирует методы, вызываемые в конструкторе, для обнаружения инициализации, поскольку производный класс может перезаписать такие методы, и члены не будут инициализированы.

readonly

Конструкторы (constructors)

Конструкторы класса очень похожи на функции. Мы можем добавлять в них параметры с аннотациями типа, значения по умолчанию и перегрузки:

Однако, между сигнатурами конструктора класса и функции существует несколько отличий:

Конструкторы не могут иметь параметров типа — это задача возлагается на внешнее определение класса, о чем мы поговорим позже

Конструкторы не могут иметь аннотацию возвращаемого типа — всегда возвращается тип экземпляра класса

super

Методы (methods)

Метод — это свойство класса, значением которого является функция. Методы могут использовать такие же аннотации типа, что и функции с конструкторами:

Как видите, TS не добавляет к методам ничего нового.

Геттеры/сеттеры

Классы могут иметь акцессоры (вычисляемые свойства, accessors):

TS имеет несколько специальных правил, касающихся предположения типов в случае с акцессорами:

Если set отсутствует, свойство автоматически становится readonly

Параметр типа сеттера предполагается на основе типа, возвращаемого геттером

Если параметр сеттера имеет аннотацию типа, она должна совпадать с типом, возвращаемым геттером

Геттеры и сеттеры должны иметь одинаковую видимость членов (см. ниже)

Сигнатуры индекса (index signatures)

Классы могут определять сигнатуры индекса. Они работают также, как сигнатуры индекса в других объектных типах:

Обычно, индексированные данные лучше хранить в другом месте.

Классы и наследование

Как и в других объектно-ориентированных языках, классы в JS могут наследовать членов других классов.

implements

Предостережение

Важно понимать, что implements всего лишь проверяет, соответствует ли класс определенному интерфейсу. Он не изменяет тип класса или его методов. Ошибочно полагать, что implements изменяет тип класса — это не так!

Также следует помнить о том, что определение в интерфейсе опционального свойства не приводит к созданию такого свойства:

extends

Классы могут расширяться другими классами. Производный класс получает все свойства и методы базового, а также может определять дополнительных членов.

Перезапись методов

TS обеспечивает, чтобы производный класс всегда был подтипом базового класса.

Пример «легального» способа перезаписи метода:

Важно, чтобы производный класс следовал контракту базового класса. Помните, что очень часто (и всегда легально) ссылаться на экземпляр производного класса через указатель на базовый класс:

Что если производный класс не будет следовать конракту базового класса?

Если мы скомпилируем этот код, несмотря на ошибку, такой «сниппет» провалится:

Порядок инициализации

Порядок инициализации классов может быть неожиданным. Рассмотрим пример:

Что здесь происходит?

Порядок инициализации согласно спецификации следующий:

Инициализация полей базового класса

Запуск конструктора базового класса

Инициализация полей производного класса

Запуск конструктора производного класса

Наследование встроенных типов

Для такого подкласса:

вы можете обнаружить, что:

instanceof сломается между экземплярами подкласса и их экземплярами, поэтому ( new MsgError() ) instanceof MsgError возвращает false

Видимость членов (member visibility)

Мы можем использовать TS для определения видимости методов и свойств для внешнего кода, т.е. кода, находящегося за пределами класса.

public

Поскольку public является дефолтным значением, специально указывать его не обязательно, но это повышает читаемость и улучшает стиль кода.

protected

Защищенные члены видимы только для подклассов класса, в котором они определены.

Раскрытие защищенных членов

Производные классы должны следовать контракту базового класса, но могут расширять подтипы базового класса дополнительными возможностями. Это включает в себя перевод protected членов в статус public :

Доступ к защищенным членам за пределами иерархии классов

Разные языки ООП по-разному подходят к доступу к защищенным членам из базового класса:

private

Частные члены похожи на защищенные, но не доступны даже в подклассах, т.е. они доступны только в том классе, где они определены.

Поскольку частные члены невидимы для производных классов, производный класс не может изменять их видимость:

Доступ к защищенным членам между экземплярами

TS разрешает такой доступ:

Предостережение

Для реализации «настоящих» частных членов можно использовать такие механизмы, как замыкания (closures), слабые карты (weak maps) или синтаксис приватных полей класса (private fields, # ).

Статические члены (static members)

В классах могут определеяться статические члены. Такие члены не связаны с конкретными экземплярами класса. Они доступны через объект конструктора класса:

Статические члены наследуются:

Специальные названия статических членов

Почему не существует статических классов?

В некоторых языках, таких как C# или Java существует такая конструкция, как статический класс (static class).

Существование этих конструкций обусловлено тем, что в названных языках все данные и функции должны находиться внутри классов; в TS такого ограничения не существует, поэтому в статических классах нет никакой необходимости.

Например, нам не нужен синтаксис «статического класса», поскольку обычный объект (или функция верхнего уровня) прекрасно справляются с такими задачами:

Общие классы (generic classes)

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

Параметр типа в статических членах

Следующий код, как ни странно, является НЕлегальным:

Значение this в классах во время выполнения кода

TS не изменяет поведения JS во время выполнения. Обработка this в JS может показаться необычной:

TS предоставляет некоторые средства для изменения такого поведения.

Стрелочные функции

Если у вас имеется функция, которая часто будет вызываться способом, приводящим к потере контекста, имеет смысл определить такое свойство в виде стрелочной функции:

Это требует некоторых компромиссов:

Значение this будет гарантированно правильным во время выполнения, даже в коде, не прошедшем проверки с помощью TS

Будет использоваться больше памяти, поскольку для каждого экземпляра класса будет создаваться новая функция

Параметры this

TS проверяет, что функция с параметром this вызывается в правильном контексте. Вместо использования стрелочной функции мы можем добавить параметр this в определение метода для обеспечения корректности его вызова:

Данный подход также сопряжен с несколькими органичениями:

Мы все еще имеем возможность вызывать метод неправильно

Выделяется только одна функция для каждого определения класса, а не для каждого экземпляра класса

Базовые определения методов могут по-прежнему вызываться через super

Типы this

В классах специальный тип this динамически ссылается на тип текущего класса:

Мы также можем использовать this в аннотации типа параметра:

Это отличается от other: Box — если у нас имеется производный класс, его метод sameAs будет принимать только другие экземпляры этого производного класса:

Основанные на this защитники типа

Свойства параметров

Выражения классов (class expressions)

Выражения классов похожи на определения классов. Единственным отличием между ними является то, что выражения классов не нуждаются в названии, мы можем ссылаться на них с помощью любого идентификатора, к которому они привязаны (bound):

Абстрактные классы и члены

Классы, методы и поля в TS могут быть абстрактными.

Абстрактным называется метод или поле, которые не имеют реализации. Такие методы и поля должны находится внутри абстрактного класса, который не может инстанцироваться напрямую.

Абстрактные классы выступают в роли базовых классов для подклассов, которые реализуют абстрактных членов. При отсутствии абстрактных членов класс считается конкретным (concrete).

Обратите внимание: если мы забудем реализовать абстрактных членов, то получим ошибку:

Сигнатуры абстрактных конструкций (abstract construct signatures)

Иногда нам требуется конструктор класса, создающий экземпляр класса, производный от некоторого абстрактного класса.

Вместо этого, мы можем написать функцию, которая принимает нечто с сигнатурой конструктора:

Теперь TS правильно указывает нам на то, какой конструктор может быть вызван — Derived может, а Base нет.

Отношения между классами

В большинстве случаев классы в TS сравниваются структурно, подобно другим типам.

Например, следующие два класса являются взаимозаменяемыми, поскольку они идентичны:

Также существуют отношения между подтипами, даже при отсутствии явного наследования:

Однако, существует одно исключение.

Пустые классы не имеют членов. В структурном отношении такие классы являются «супертипами» для любых других типов. Так что, если мы создадим пустой класс (не надо этого делать!), вместо него можно будет использовать что угодно:

Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Источник

Читайте также:  можно ли лечить некроз
Строй-портал