【问题标题】:C# class default methodC# 类默认方法
【发布时间】:2011-12-15 18:21:38
【问题描述】:

有没有办法像这样为类分配默认方法:

public class EscMenu
{
    public static void EscMenu()
    {
        //do something
    }

   public static void SomeOtherMethod()
   {
       //do something else
   }
}

因此,当我在同一解决方案中的另一个类中调用 EscMenu.SomeOtherMethod(); 时,它确实“做其他事情”,但我不能调用 EscMenu();

我该怎么做?

谢谢!

编辑:

好的,我会尝试以更好的方式解释这一点:

当我从另一个(外部)类调用它时,我只想让类 EscMenu 做一些事情:EscMenu();。当然我可以很容易地在EscMenu 中创建一个方法default() 并在外部调用EscMenu.default();。但我真的很想打电话给EscMenu();

如果那是不可能的,或者我仍然无法解释自己,那么请不要介意;-)

再次感谢!

【问题讨论】:

  • 很难理解你想要达到什么目的
  • 我不能调用“EscMenu();””是什么意思?
  • 编辑了我的问题。希望这次我能更好地解释自己^^

标签: c# class function methods default


【解决方案1】:

不,你不能给一个方法和它的包含类型同名——而且你真的不想把一个类型的名字和一个方法的名字混为一谈。为什么要引入歧义?

如果您可以举一些示例,说明您想以不同于现有方式的方式编写代码,我们或许可以为您提供更多帮助。 (例如,可能扩展方法会有所帮助。)

【讨论】:

  • @janw:好的,基本上不,你不能这样做。坦率地说,我很高兴 - 因为它看起来就像你的代码在做一件事(试图在当前范围内找到一个名为 EscMenu 的方法),而实际上它正在尝试做另一件事。跨度>
【解决方案2】:

“默认”方法的概念在 C# 中是一种荒谬,但从我可以从您的要求中收集到的情况来看,您不希望能够在外部(即在课堂之外)调用 EscMenu ,因此为此使用 private 访问修饰符:

private static void EscMenu(){
    //do something
}

但您需要为成员指定一个不同的名称。

【讨论】:

    【解决方案3】:

    我不知道默认方法是什么意思。但是为了防止其他类调用你的 ExcMenu 类中的方法,你可以将你的方法设为私有:

    public class EscMenu
    {
        private static void EscMenu()
        {
           //do something
        }
    
        public static void SomeOtherMethod()
        {
            //do something else
        }
    }
    

    【讨论】:

      【解决方案4】:

      你所拥有的(如果你清理了语法)是static constructor

      • 静态构造函数不接受访问修饰符或有参数。
      • 在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。
      • 不能直接调用静态构造函数。
      • 用户无法控制何时在程序中执行静态构造函数。

      【讨论】:

      • 是的。他们在那里拥有的东西可以被解释为不恰当地尝试成为静态构造函数,或者不恰当地尝试成为成员函数。我已经在原始答案中澄清了。
      猜你喜欢
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 2011-10-01
      • 2012-05-17
      相关资源
      最近更新 更多