可以创建XNamespace对象,如下所示:
XNamespace ns="http://www.xyz.com";
此处字符串“http://www.xyz.com”被解释为该类的属性值(NamespaceName)。我想知道我是否可以创建这样一个自定义类,它可以像这样实例化。语法实际上看起来很酷。
答案 0 :(得分:5)
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也支持addition operator,它接受字符串作为右参数。如果您正在处理字符串,这是一个非常好的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);
}
答案 1 :(得分:3)
您只需要在字符串中添加implicit conversion operator:
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设计方面做了各种“有点可疑”的事情......但是设法摆脱它因为它们整齐地融合在一起。)