Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该如何明确我的重载?_C#_Parameters_Constructor_Wrapper_Overloading - Fatal编程技术网

C# 我应该如何明确我的重载?

C# 我应该如何明确我的重载?,c#,parameters,constructor,wrapper,overloading,C#,Parameters,Constructor,Wrapper,Overloading,我正在为C#的jquery插件构建一个包装器,我不喜欢[Optional]的用法,因为它不像它所说的那样是“可选的”(这意味着您仍然必须声明该系统。缺少库),所以我决定使用重载方法。我想给用户大量的定制,但我不确定我应该如何明确我的重载。我应该根据参数的重要性进行分解,还是对每个场景进行重载 超载的脚印是什么? 它会降低效率吗? 从OOP的角度来看,它是不受欢迎的吗 另外,我正在调用一个基类的构造函数,必须使用base(param1,param2,…)方法,但我也希望使用this(param1

我正在为C#的jquery插件构建一个包装器,我不喜欢[Optional]的用法,因为它不像它所说的那样是“可选的”(这意味着您仍然必须声明该系统。缺少库),所以我决定使用重载方法。我想给用户大量的定制,但我不确定我应该如何明确我的重载。我应该根据参数的重要性进行分解,还是对每个场景进行重载

超载的脚印是什么?
  • 它会降低效率吗?
  • 从OOP的角度来看,它是不受欢迎的吗


  • 另外,我正在调用一个基类的构造函数,必须使用
    base(param1,param2,…)
    方法,但我也希望使用
    this(param1,param2,…
    ),而不是在每个场景中初始化我的成员变量,有什么办法可以解决这个问题吗?

    一个令人困惑的API是图书馆消费者永远的祸根。让人们在您提供的界面下可以轻松甚至轻松地决定他们到底想做什么。如果他们必须从冗长的重载函数列表中进行选择,那可能会造成太多的认知开销。另外,值得注意的是,C#4将支持可选参数和命名参数,因此您的
    系统丢失问题将自行解决

    从OOP的角度来看,它是不受欢迎的吗

    OOP支持或SRP。如果有一个类包含许多这样的函数,每个函数都有许多重载,这表明它可能做得太多了

    它会降低效率吗


    如果同一个方法有很多重载,那么静态解析每个函数调用需要更长的时间(例如,“使用此名称的哪个方法是正确的?”)。但如果它们是非虚拟调用,那么这不会对性能产生运行时影响——也就是说,编译器可以静态地准确地知道某个对象将是什么类型。无论如何,我不认为这应该是你的激励因素。

    如果你有很多参数,需要扩展,考虑使用包含参数的类。

    例如


    我喜欢这种方法,但唯一的问题是,我希望基类中的重写方法在构造函数中或对象初始化时启动。
    public class FileOptions
    {
      public bool Indented { get; set; }
      public string Namespace { get; set; }
      public System.Text.Encoding Encoding { get; set; }
    }
    
    public void Save(string fileName, FileOptions options) { ... }
    
    // usage:
    
    obj.Save("a.xml", new FileOptions { Indented=true });
    obj.Save("b.xml", new FileOptions { Namespace="urn:foo", Encoding=System.Text.Encoding.UTF8 });