【问题标题】:Multiple aliases for same type in c#c#中同一类型的多个别名
【发布时间】:2020-05-09 07:32:55
【问题描述】:

我更喜欢 Delegates 作为参数。 因此,我通常会遇到委托的多个参数属于同一类型的情况。我正在努力提高可读性。为此,尝试使用 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;
    }
}

从屏幕截图中可以清楚地看出,所有参数的别名名称都是相同的。有没有办法纠正这个问题?或者别名的使用不正确?

【问题讨论】:

    标签: c# delegates alias using


    【解决方案1】:

    我不能说我完全理解你的方法背后的理性,但重要的是要考虑到你基本上声明的是:

    FirstNumber = SecondNumber = Result = System.Int32;
    

    因为所有这些身份现在都指向同一个类型,System.Int32。出于这个原因,visual studio 选择使用第一作者分配的别名来填充智能感知。

    当涉及到委托的声明时,请考虑您只是定义了所需的签名,即“IN 和 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;
    }
    
    

    【讨论】:

    • 由于调用者将分配“add”委托,因此一种方法是按照您的建议定义自定义委托,以提高可读性。它在我限制代表数量的情况下很有用,而生产代码中不是这种情况。所以我更喜欢使用内置委托,而不是为每个委托设计新的自定义委托。同样如您所说,智能感知显示相同的别名,这是预期的行为吗?
    • 明白。就个人而言,是的,我会说这是意料之中的,因为现在所有这些身份都指的是同一类型。如果我可以问;为什么要单独“识别”函数中的类型?因为是调用者分配将确定参数使用的方法。例如,您还不知道它是“First + Second”还是“Second / First”或该签名的任何可以想象的方法......
    • 假设在 div 操作中,分子和分母被互换并传递给与我为 add 定义的签名相同的函数,那么这将是完全错误的,如果所有类型都是相同的类型和调用者会使用感觉来识别什么是什么。如果它在库函数中,则并非在所有情况下都是可能的。不是吗?
    • 委托的真正目的是它们可以调用已定义签名的任何方法,而不管它们的功能如何。如果您尝试仅通过命名来“保护”免受不受欢迎的方法分配,您可能会遇到更进一步的问题。我建议您是否对可以分配和不能分配给代表的内容有定义的符号,在内部定义方法,并向调用者公开一些选择枚举,以便他们可以根据需要进行配置?
    • 嗯,这是一个不同的问题,它可以通过多种方式解决。我相信我们刚刚解决了原始问题。您的关心和建议完全合理。
    猜你喜欢
    • 2015-10-30
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多