将新属性添加到字符串类 C# [重复]
Posted
技术标签:
【中文标题】将新属性添加到字符串类 C# [重复]【英文标题】:Add new property to string class C# [duplicate] 【发布时间】:2011-10-10 15:02:07 【问题描述】:我想知道是否可以将新属性作为扩展属性添加到字符串类。我要找的是这样的
string.Empty
我想做一个扩展,例如:
string.DisplayNone;
我可以向字符串 C# 类添加扩展属性,我可以以类似的方式调用,就像我做 string.Empty 时一样?
【问题讨论】:
不,您不能添加静态扩展方法,因为扩展方法需要对象的实例 算了。乔恩说不可能***.com/questions/1676191/… :) @Cybernate:不能添加静态扩展方法是正确的,但这并不是因为扩展方法需要实例。您只需要正确类型的引用,但引用可以为空。 "something".DisplayNone 有什么意义?您的代码的用户将永远对为什么 "nothing".DisplayNone 返回完全相同的东西感到困惑。了解静态属性和实例属性之间的区别。 【参考方案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 对此问题的回答。
【讨论】:
以上是关于将新属性添加到字符串类 C# [重复]的主要内容,如果未能解决你的问题,请参考以下文章