【问题标题】:Method "Inheriting" other's method parameters方法“继承”其他方法参数
【发布时间】:2016-06-13 20:51:11
【问题描述】:

我想知道 c# 是否提供任何方法让方法“继承”它们的参数并允许使用它们,而不是再次将参数列表传递给第二个方法。以下是它可能的工作方式:

 void Method1(string p1, int p2, bool p3)
{
    string result = Method2(p1,p2,p3);
}
string Method2():Method1()
{
  if(p3)
    {
      return p1 + p2.ToString();
    }
  else
    {
        return null;
    }

}

而不是

    void Method1(string p1, int p2, bool p3)
{
    string result = Method2(p1,p2,p3);
}
string Method2(string p1, int p2, bool p3)
{
  if(p3)
    {
      return p1 + p2.ToString();
    }
  else
    {
        return null;
    }
}

不确定它是否真的有意义,但我很好奇它是否可能。如果没有,您是否有任何解决方法可以避免将这些参数重写为 Method2()?

【问题讨论】:

  • 看看这个..这是你想要完成的事情,如果现在请尝试更好地解释..stackoverflow.com/questions/13536993/…
  • 你的例子没有提供一个很好的理由来说明为什么这应该是有意义的。 Method1 的存在没有明显的理由。答案是否定的,这是不可能的。

标签: c# methods parameters parameter-passing


【解决方案1】:

不,不存在这样的构造,即使它存在,继承方法参数也没有意义。在最大情况下,在第二种方法中,您可以将它们设为可选参数

 void Method1(string p1, int p2, bool p3)
{
    string result = Method2(p1,p2,p3);
}

string Method2(string p1 = null, int p2 = 10, bool p3 = false)
{

【讨论】:

    【解决方案2】:

    不,您不能继承参数。问题是否在于您有许多具有相同签名的方法都传递相同的参数集,而您不想在进行更改时维护它们?
    如果您要传递一个包含多个值的“实体”,那么我们通常可以创建一个类。

    public class WhateverTheseParametersAre
    {
        public string P1 {get;set;}
        public string P2 {get;set;}
        public bool P3 {get;set;}
    }
    

    这也消除了对可选/默认参数的需要。

    【讨论】:

    • 是的,我想将这些变量包装到一个类/元组中是最有意义的。实际上,我出于好奇而不是真正的问题提出了这个问题。我试图用 Reflection 和 params[] 关键字来实现一些东西,但无论如何它可能会无效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多