【问题标题】:C#: calling non static member function without creating objectC#:调用非静态成员函数而不创建对象
【发布时间】:2018-11-01 05:44:09
【问题描述】:

在浏览代码库时,我遇到了类似于以下的语句:

new Class().MemberFunction();

这个语句实际上在做什么?是在不创建这个类的对象的情况下调用成员函数吗?

【问题讨论】:

  • 它与Class myInstance = new Class(); myInstance.MemberFunction(); 相同,只是它不使用变量。 new创建对象/实例;并且在这两种情况下,[member] 方法调用都会在评估为实例的表达式 上调用。这与AMethodReturningAnObjectOfClassThatMightBeNewOrReused().MemberFunction()“有效”的原因相同:在适当的Class表达式 上调用该成员。
  • Method-Chaining in C#的可能重复

标签: c#


【解决方案1】:

它正在创建一个 Class 的新实例 - 正如您可以清楚地看到代码的 new Class() 部分 - 唯一不“常见”的是它不存储对该实例的引用,但只需使用它来调用MemberFunction();

这意味着想要执行MemberFunction() 的人不需要保留对特定实例的引用(这反过来可能意味着应该将MemberFunction() 转换为静态方法,但没有足够的信息肯定知道)。

【讨论】:

    【解决方案2】:
    1. 创建一个新类(因为'new')

    2. 启动您调用的 MemberFunction()

    这意味着,它并不能达到你真正想要的效果。

    即使是静态的也已经创建了一次类。

    【讨论】:

    • "即使是静态的也已经创建了一次类。"什么?调用静态成员可以保证类型初始化,但肯定不会创建该类型的实例...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多