Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/285: Рейтинг темы: голосов - 285, средняя оценка - 4.94
2 / 2 / 0
Регистрация: 29.08.2013
Сообщений: 14

Что такое сигнатура метода?

12.12.2013, 22:06. Показов 54878. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят,подскажите,что такое сигнатура метода?Всё уже облазил,но не получил толкового ответа
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2013, 22:06
Ответы с готовыми решениями:

Что такое метод equals() и что такое класс Object
Ответи на два вопроса очень надо 1) Что такое метод equals(). Чем он отличается от операции ==. 2) Что такое класс Object? Какие в нем...

Что означает первый параметр метода этого класса? И почему при вызове метода передаётся один параметр(второй)?
public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId)

Что такое сигнатура
Здравствуйте, нам дали задание изменить собственную программу в рабочем состоянии и изменить в ней переменную - количество деталей...

14
1615 / 1181 / 552
Регистрация: 08.01.2012
Сообщений: 4,558
12.12.2013, 22:10
набор/последовательность передаваемых ему параметров
0
2 / 2 / 0
Регистрация: 29.08.2013
Сообщений: 14
12.12.2013, 22:12  [ТС]
это же я ответил своему преподавателю по программированию,когда он спросил,но он сказал,что этого мало, и отправил готовиться =(
0
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
13.12.2013, 02:17
MansMI, и возвращаемого значения ?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
13.12.2013, 02:39
Имя метода, количество и тип(ы) аргументов и их последовательность.
Возвращаемое значение в шарпе частью сигнатуры не является.
5
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
13.12.2013, 09:31
И еще имена параметров, забыли.
0
1 / 1 / 0
Регистрация: 25.11.2012
Сообщений: 24
13.12.2013, 16:48
Сигнатура метода включает в себя:
- Пространство имен и класс
- Идентификатор метода
- Порядок, тип, модификаторы(ref, out) параметров
Но не включает:
- Тип возвращаемого значения
- Модификатор static
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
13.12.2013, 18:05
Цитата Сообщение от turbanoff Посмотреть сообщение
И еще имена параметров, забыли.
Имена параметров не являются частью сигнатуры.
1
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
13.12.2013, 18:16
Цитата Сообщение от kolorotur Посмотреть сообщение
Имена параметров не являются частью сигнатуры.
Если говорить, про язык C# - то имена параметров являются часть сигнатуры.
Пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
static void Main(string[] args) {
    Method1(a:1);
    Console.ReadKey();
}
 
static void Method1(int b) {
    Console.WriteLine("int");
}
 
static void Method1(double a) {
    Console.WriteLine("double");
}
Компилятор выбирает метод, который должен вызваться, по сигнатуре. И в данном случае выбирается именно в зависимости от имени параметра.
2
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
13.12.2013, 19:02
turbanoff, сигнатура — это то, что однозначно идентифицирует конкретный метод.

C#
1
2
void Foo(int a) {}
void Foo(int b) {}
Не скомпилируется, т.к. у обоих методов одинаковая сигнатура.

Слово спеку:
3.6 Signatures and overloading
The signature of a method consists of the name of the method, the number of type parameters and the type and kind (value, reference, or output) of each of its formal parameters, considered in the order left to right. For these purposes, any type parameter of the method that occurs in the type of a formal parameter is identified not by its name, but by its ordinal position in the type argument list of the method. The signature of a method specifically does not include the return type, the params modifier that may be specified for the right-most parameter, nor the optional type parameter constraints.
Ваш пример — это форсированный вызов конкретной перегрузки метода, только вместо ручного каста используется имя параметра, которое компилятор, фактически, заменит на обычный Method1((double)1).
То есть синтаксический сахар, вроде var.
Получившийся CIL на это как бы намекает:
C#
1
IL_000c:  call       void ConsoleApplication.Program::Method1(float64)
Хоть имя параметра и сохраняется в метаданных, но само по себе оно не служит для определения уникальности метода, то есть не является его сигнатурой.
3
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.12.2013, 21:23
kolorotur, имхо возвращаемое значение также является частью сигнатуры, хотя и нельзя написать перегрузку с одинаковыми параметрами, возвращающими разный тип.
2
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
13.12.2013, 23:15
Цитата Сообщение от Psilon Посмотреть сообщение
имхо возвращаемое значение также является частью сигнатуры, хотя и нельзя написать перегрузку с одинаковыми параметрами, возвращающими разный тип.
Вы конкретно про шарп или про "в принципе"?
Если про шарп, то конкретно в этом языке возвращаемой значение не является частью сигнатуры. Конечно, если мы оперируем одним и тем же понятием "сигнатура", то бишь часть синтаксической конструкции, позволяющая однозначно идентифицировать функцию среди других.

Если про "вообще", то в разных языках по-разному.
В Си-подобных языках, насколько мне известно, возвращаемый тип не может являться частью сигнатуры из-за неоднозначности вызова при отсутствии присваивания возвращаемого значения:
C#
1
2
3
4
5
6
7
int Foo();
string Foo();
 
void Main()
{
   Foo(); // ???
}
Есть языки, где возвращаемый тип является частью сигнатуры (Ada, F#, Perl, Haskell, может еще что-то), но там либо вызов функции жестко привязан к контексту, в котором всегда однозначно известен возвращаемый тип, либо как-то по-другому обрабатывается вышеприведенная ситуация. В том же Haskell'e, например, если прописать вызов функции без присваивания результата переменной, то эта функция вызвана вообще не будет. А если результат присваивается, но из типа переменной нельзя однозначно определить вызываемую функцию, то компилятор ругнется и придется в месте вызова явно указывать тип возвращаемого этой функцией значения.

В общем, каждый дрочит, как хочет.
5
1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 14
12.02.2018, 10:43
Наткнулся на Ваш спор, а потому вот первоисточник
https://msdn.microsoft.com/ru-... .120).aspx
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.02.2018, 10:51
Цитата Сообщение от KoSeOl Посмотреть сообщение
вот первоисточник
Ссылка на первоисточник — спецификацию языка, дана в десятом сообщении этой темы
Но все равно спасибо за вклад в общую копилку знаний.
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
17.05.2019, 19:24
Цитата Сообщение от kolorotur Посмотреть сообщение
вклад в общую копилку знаний


Те, кто читал Шилдта, этого классика, знают очень хорошо, что сигнатура можно записать в виде:

C#
1
2
3
Method (int, int)
Method (int, int, int)
Method (double, int)
Всё это разные сигнатуры одного метода => это работающие перегрузки этого метода...

Остаётся лишь убедиться. Скажем, разные ли следующие сигнатуры:

C#
1
2
Method (double, int)
Method (int, double)

Не по теме:

Что ж, да пребудет с нами компилятор, славный csc.exe...



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
 
class MyClass {
    
    int a; 
    double b;
 
    public void Method ( int a, double b ) 
    {
        this.a = a;   
        this.b = b;
 
        Console.WriteLine("int & then double");
    }
 
    public void Method ( double b, int a ) 
    {
        this.b = b;
        this.a = a;
        Console.WriteLine("double & then int");
    }
}
 
class Program 
{
    static void Main () 
    {
        Console.Clear();
 
        MyClass vah = new MyClass();
        int a = 1;  double b = 1.6;
        vah.Method(a, b);
        vah.Method(b, a);
 
        Console.ReadKey();
    }
}
The output:

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2019, 19:24
Помогаю со студенческими работами здесь

Хэндлер и сигнатура метода. Как описать?
Добрый день всем. Есть у меня кусочек кода: Imports OrderToAloha Imports OrderToAloha.OrderToAloha Imports DataReciver ...

Сигнатура типа метода не совместима с Interop
Вывожу в Excel отчеты из DataGridView. Все отчеты выводятся нормально, а один постоянно выдает ошибку Сигнатура типа метода не совместима...

Сигнатура std::function и прототип метода
Добрый вечер, #include <functional> #include <string> #include <iostream> using namespace std; class A { ...

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое IIS и что такое PWS? Почему одно без другого не работает?
вот уже второй день пытаюсь немного разобраться в АСП. накидал небольшую тестовую страничку. но с серверами я ничего не понимаю! что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru