【问题标题】:how to call static method inside non static method in c#如何在c#中的非静态方法中调用静态方法
【发布时间】:2014-02-03 16:41:26
【问题描述】:

如何在c# 中的non static 方法中调用static 方法?

面试官给了我一个场景:

class class1
{

    public static void method1(){}

    public void method2()
    {
        //call method1()
    }

我们该怎么做

【问题讨论】:

  • method1的返回类型是什么?
  • 不知道为什么大家都在抱怨返回类型,因为这不是这个问题的意义所在。当然它需要一个,但它不会改变问题的基本原理。另外我个人会使用类名,因为它更清楚发生了什么。 class1.method1();
  • 我想知道 OP 是否将静态构造函数与静态方法混淆,并认为通过询问返回类型,我可能会发现意图
  • 我不知道为什么这甚至会成为一个问题。给定一个格式正确的类,您不必跳过任何环节来调用实例对象中的静态成员(只要您避免尝试通过this 解析)。

标签: c# .net static-methods


【解决方案1】:

通常的做法是使用类名调用静态方法。

见:Static Classes and Static Class Members (C# Programming Guide)

静态成员总是通过类名访问,而不是 实例名称。静态成员只存在一个副本,无论 创建了多少个类的实例。

所以你的电话会是这样的:

class1.method1();

但这没有必要

您可以调用没有类名的静态方法,例如:

method1();

但是您只能在包含该静态方法的类中执行此操作,您不能在该类之外调用没有类名的静态方法。

【讨论】:

    【解决方案2】:
    class1.method1();
    

    与调用任何其他静态方法相同

    显然(正如 Selman22 指出的那样)- 类名不是必需的。

    所以

    method1();
    

    同样有效

    【讨论】:

    • 谁说类名是必要的 ??
    • 哦,其实不用加类名,不过不管怎样都行
    • okey,请注意:) 他/她可能认为类名是必需的 OP 只是忘记编写静态方法的返回类型,因此无法编译。
    【解决方案3】:

    如果您在某个类中调用该方法,您只需像这样调用它

        public void method2()
        {
            method1();  
    
        }
    

    但是如果它应该从另一个类中调用,你必须在它前面加上类的名称

    public void method2()
            {
                class1.method1();  
    
            }
    

    【讨论】:

    • method1 需要一个返回类型才能编译。
    【解决方案4】:

    你输入方法名,然后编译运行它:

    class class1
    {
        public static void method1(){}
    
        public void method2()
        {
            method1()
        }
    }
    

    【讨论】:

    • 很好奇,调用method1()class1.method1() 有什么区别?应该没有什么区别,因为它是静态的,我只是想知道你为什么不从类引用中静态调用它?
    • @JoeBrunscheon 没有区别。从类型本身调用方法时,可以省略类型名称。是推断出来的。
    • 对于不赞成这个答案的人,我假设您没有意识到 class1 会被编译器简单地推断出来,并且没有必要包含它。
    • 我知道它们是一样的,但只是想听听您对此的看法。在我看来,无论您是通过类名还是仅通过方法名调用静态方法,这将归结为编程风格指南,而不是其他任何事情。
    • @JoeBrunscheon 与大多数其他可以推断的东西一样,默认情况下,我允许编译器推断它可以推断的任何东西,除非我有一些令人信服的理由不这样做。例如,如果在同一个类中有一个同名的静态和非静态方法,我可能会更明确,但如果我觉得没有理由混淆该方法是静态的事实,我不会费心这么露骨的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多