繁体   English   中英

c# 扩展方法来定义行为类似于静态类/类型方法的方法,而不是实例方法

[英]c# extension method to define method that behaves like a static class / type method, not an instance method

我在一个类中有这个静态方法:

public class MyTimeZoneHelperClass {

        public static TimeZoneInfo EST = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

        public static DateTime Convert_UTC_to_EST(this DateTime utcDateTime)
        {
            return TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, EST);
        }

        public static DateTime NowEST()
        {
            return DateTime.UtcNow.Convert_UTC_to_EST();
        }
}

我只是去写一个扩展方法,比如我要命名为“EstNow”的 DateTime TYPE,这样我就可以像这段代码使用 DateTime.UtcNow 一样使用 DateTime.EstNow。 如果我有那个,我就不必引用上面的这个静态类 - MyTimeZoneHelperClass.NowEst - 我的代码会更干净一点,我不必记住那个类名/我更喜欢这里的一个类而不是两个.

所以扩展方法不能那样工作。 它们是静态方法,但是您需要一个类的实例来调用该方法 - 呃!

这可能吗? 我可以(最好是轻松地)让编译器识别类型上的新/自定义静态方法吗?

不,您不能编写“静态扩展”成员来扩展类型而不是类型的实例。 它只是不是 C# 的一部分。 已经讨论,将来可能会发生,尽管我认为它不在 C# 9 的预期功能列表中。

正如我们所说,在 c# github 上有一个未解决的问题: https : //github.com/dotnet/csharplang/issues/2505

开放意味着它尚未实施。 总结一下:

  1. 没有解决方法,没有什么可以尝试减轻缺失的功能
  2. 在这一点上似乎没有兴趣实施这个

ldm 中没有人认为现在值得提倡这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM