创建一个可以像XNamespace类那样实例化的类
本文关键字:XNamespace 实例化 一个 创建 | 更新日期: 2023-09-27 18:18:56
可以按如下方式创建XNamespace对象:
XNamespace ns="http://www.xyz.com";
这里字符串"http://www.xyz.com"被解释为该类的属性值(NamespaceName)。我想知道我是否可以创建这样一个自定义类,它可以像那样实例化。语法实际上看起来很酷。
class MyClass
{
public string Value {get; private set;}
public MyClass(string s)
{
this.Value = s;
}
public static implicit operator MyClass(string s)
{
return new MyClass(s);
}
}
现在你可以:
MyClass myClass = "my string";
Console.WriteLine(myClass.Value); //prints "my string"
注意,XNamespace还支持加法运算符,它接受字符串作为右参数。如果你在处理字符串,这是一个很好的API决策。要实现这一点,还可以重载加法运算符:
//XNamespace returns XName (an instance of another type)
//but you can change it as you would like
public static MyClass operator +(MyClass val, string name)
{
return new MyClass(val.Value + name);
}
您只需要添加一个隐式转换操作符,从string:
public class Foo
{
private readonly string value;
public Foo(string value)
{
this.value = value;
}
public static implicit operator Foo(string value)
{
return new Foo(value);
}
}
我要小心地使用它——它使阅读代码时不那么明显。
(LINQ to XML在API设计方面做了各种"有点可疑"的事情…但它却成功地逃脱了惩罚,因为它非常完美地结合在了一起。