【问题标题】:Add new property to string class C# [duplicate]将新属性添加到字符串类 C# [重复]
【发布时间】:2011-10-10 15:02:07
【问题描述】:

我想知道是否可以将新属性作为扩展属性添加到字符串类。我要找的是这样的

string.Empty

我想做一个扩展,例如:

string.DisplayNone;

我可以向字符串 C# 类添加扩展属性,我可以以类似的方式调用,就像我做 string.Empty 时一样?

【问题讨论】:

  • 不,您不能添加静态扩展方法,因为扩展方法需要对象的实例
  • 算了。乔恩说不可能stackoverflow.com/questions/1676191/… :)
  • @Cyber​​nate:不能添加静态扩展方法是正确的,但这并不是因为扩展方法需要实例。您只需要正确类型的引用,但引用可以为空。
  • "something".DisplayNone 有什么意义?您的代码的用户将永远对为什么 "nothing".DisplayNone 返回完全相同的东西感到困惑。了解静态属性和实例属性之间的区别。

标签: c# extension-methods


【解决方案1】:

您只能为对象构建扩展...

类似的东西:

class Program
{
    static void Main(string[] args)
    {
        string x = "Hello World";
        x.DisplayNow();
    }
}

public static class StringExtension
{
    public static void DisplayNow(this string source)
    {
        Console.WriteLine(source);
    }
}

但我从未见过你如何扩展从未初始化的结构或类。

【讨论】:

    【解决方案2】:

    是的,你可以这样做..但是它将是一个扩展方法,而不是一个属性。

    public static class Extensions
    {
        public static string DisplayNone(this string instance)
        {
            return "blah";
        }
    }
    

    需要将其用作"".DisplayNone();(尽管很老套),因为它需要创建一个字符串的实例。

    如果您愿意,另一种稍微不那么老套的方法是创建一个辅助类..

    public static StringHelper
    {
        public static string DisplayNone()
        {
            return "blah";
        }
    }
    

    【讨论】:

    • 不,调用扩展方法不需要类的实例。您只需要正确类型的引用,但引用可以为空。
    【解决方案3】:

    您也许可以创建自己的值类型。它使用“DisplayName”方法模仿 String 类型。

    但是,我不明白为什么您需要在类型上使用“DisplayName”?这在 sting 实例上更有意义。 IE。 “你好”.DisplayName。请参阅 Smokefoot 对此问题的回答。

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      相关资源
      最近更新 更多