Несколько псевдонимов для одного типа в c# - PullRequest
0 голосов
/ 09 мая 2020

Я предпочитаю делегатов в качестве аргументов везде, где это возможно. Поэтому я обычно сталкиваюсь с ситуацией, когда несколько аргументов делегата имеют один и тот же тип. Я пытаюсь сделать их более читаемыми. Чтобы добиться этого, попробуйте использовать ключевое слово c# с директивой using.

using System;
using FirstNumber = System.Int32;
using SecondNumber = System.Int32;
using Result = System.Int32;

public class FunctionPointers
{
    Func<FirstNumber, SecondNumber, Result> add;

    public FunctionPointers(Func<FirstNumber, SecondNumber, Result> op)
    {
        add = op;
    }
}

Intellisense snapshot Из снимка экрана видно, что псевдонимы одинаковы для всех аргументов. Есть способ исправить это? или использование алиасов некорректно?

1 Ответ

0 голосов
/ 09 мая 2020

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

FirstNumber = SecondNumber = Result = System.Int32;

То, что все эти идентичности теперь относятся к однотипный, System.Int32. По этой причине Visual Studio использует для заполнения intellisense первого автора, которому присвоены ссылки.

Когда дело доходит до объявления делегатов, учтите, что вы просто определяете требуемую подпись, являющуюся типом (-ами) «IN and OUT». Это метод, который в конечном итоге «обернут» / «инкапсулирован», который предоставит идентификаторы параметров. введите «читаемые» идентификаторы, которые вы хотели:

public class FunctionPointers
{
    Operator Add;

     public FunctionPointers(Operator addOp)
     {
            Add = addOp;
     }       
}

public delegate Int32 Operator(Int32 FirstNumber, Int32 SecondNumber);

В противном случае, «нормальный» способ, с идентификаторами в методе:

Func<Int32,Int32,Int32> add;

public FunctionPointers()
{
    add = AddMethod;
}

public Int32 AddMethod(Int32 FirstNumber, Int32 SecondNumber)
{
    return FirstNumber + SecondNumber;
}

...