将新属性添加到字符串类C#

将新属性添加到字符串类C#,c#,extension-methods,C#,Extension Methods,我想知道是否可以添加一个新属性作为string类的扩展属性。我要找的是这样的东西 string.Empty 我想延期,例如: string.DisplayNone; 我可以向string C#类添加扩展属性吗?我可以像调用string.Empty一样调用它吗?是的,你可以这样做。。但是,它将是一个扩展方法,而不是一个属性 public static class Extensions { public static string DisplayNone(this string inst

我想知道是否可以添加一个新属性作为string类的扩展属性。我要找的是这样的东西

string.Empty
我想延期,例如:

string.DisplayNone;

我可以向string C#类添加扩展属性吗?我可以像调用string.Empty一样调用它吗?

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

public static class Extensions
{
    public static string DisplayNone(this string instance)
    {
        return "blah";
    }
}
需要将其用作
“”.DisplayNone()因为它需要创建字符串的实例

但是,如果您想这样做,另一个稍微不那么麻烦的方法是创建一个helper类

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

您只能为对象生成扩展

诸如此类:

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);
    }
}

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

您可以创建自己的值类型。它使用“DisplayName”方法模拟类型字符串


但是,我不明白为什么在类型上需要“DisplayName”?这在sting实例中更有意义。即“你好”。显示名称。请参阅Smokefoot对这个问题的回答。

否,您不能添加静态扩展方法,因为扩展方法需要对象的实例。jon说这是不可能的:)@Cybernate:不能添加静态扩展方法是正确的,但这不是因为扩展方法需要实例。您只需要正确类型的引用,但引用可以为null。“something”.DisplayNone有什么意义?代码的用户将永远困惑于为什么“什么都没有”。DisplayNone返回完全相同的内容。理解静态属性和实例属性之间的区别。不,调用扩展方法不需要类的实例。您只需要正确类型的引用,但该引用可以为null。