【问题标题】:Can you automatically pass "this" as parameter?您可以自动将“this”作为参数传递吗?
【发布时间】:2018-11-07 19:40:31
【问题描述】:

是否有自动将this 作为参数传递给函数的选项?例如,您可以使用[CallerMemberName] 自动传递string 名称。我正在寻找 this 的确切选项。

例子:

void PassMeThis([AutomaticThisParam] object source);

及用法:

public class SomeClass{    
    void SomeMethod(){
        PassMeThis(); // instead of PassMeThis(this)
    }
}

【问题讨论】:

  • PassMeThis()PassMeThis(this) 将是两个独立的方法,虽然
  • PassMeThis 方法在哪里?如果它在同一个类中,那么这个东西的目的是什么?
  • 正如@Willie 回答的那样,您很可能正在寻找 .NET 扩展方法。或者,如果您想要在给定执行上下文(如线程)中由代码中的此类函数自动获取的默认上下文数据,那么还有其他替代方法 - 例如 ThreadStatic 字段。

标签: c# methods parameters


【解决方案1】:

绝对是的。这称为扩展方法。

  1. 创建一个静态类 Public static class MethodExtensions

  2. 像这样给它添加一个静态方法 public static PassMeThis(this SomeClass model) { // }

  3. 像这样调用方法(参考您的代码示例): this.PassMeThis()

它会自动填充。 我希望这就是你要找的东西

【讨论】:

  • 我认为你也需要 Extension 属性(但也许 C# 会自动为你做这件事,不像 VB.NET)
  • @RyanPierceWilliams 在 VB 中你将需要它。在 C# 中,通过在参数签名中使用 this 关键字自动清除
  • 哦!我怎么没想到呢?感谢你的回答! :)
【解决方案2】:

如果PassMeThis在同一个类中(或祖先),就像你的例子一样,没有意义,这也是可用的。

如果它在另一个类中,则没有方法可以自动获取对调用对象的引用:IS there any way to get a reference to the calling object in c#?

【讨论】:

    猜你喜欢
    • 2015-09-20
    • 2015-03-16
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 2017-07-01
    • 2015-12-29
    相关资源
    最近更新 更多