我试图为一个对象实现一些隐式转换。目前我正在这样做:
public class PathSelector
{
private string _path = null;
public string Path
{
get { return _path; }
set
{
if (value != _path)
{
_path = value;
OnPropertyChanged("Path");
}
}
}
static public implicit operator string(PathSelector pathSelector)
{
return pathSelector.Path;
}
static public implicit operator PathSelector(string path)
{
return new PathSelector() { Path = path };
}
}
正如您在String
到PathSelector
的演员表中所看到的,我生成了一个新的PathSelector
对象。
我这样用:
public PathSelector PluginPathSelector { get; set; } = new PathSelector();
public string PluginPath
{
get
{
return PluginPathSelector;
}
set
{
PluginPathSelector = value;
}
}
我不喜欢这个解决方案,当我将字符串分配给PathSelector
对象时,我总是创建一个新对象。这也意味着,在PathSelector
属性中需要set
部分。我想将string
分配给已创建的对象。有没有办法实现这个?
答案 0 :(得分:1)
我终于明白了你想做什么。
你想要这个:
x.PluginPathSelector = "some string";
直接更改x.PluginPathSelector
中现有对象的Path属性,而不是构建新的PathSelector
实例并分配给x.PluginPathSelector
。
换句话说,你想要这个:
x.PluginPathSelector = "some string";
像你写的那样静静地处理:
x.PluginPathSelector.Path = "some string";
但是在静态转换运算符中:
static public implicit operator PathSelector(string path)
不,这是无法做到的,因为这是转换运算符。
本声明:
x.PluginPathSelector = "some string";
以这种方式处理:
"some string"
转换为PathSelector
(通过转化运算符)转换运算符实现无法访问或了解它返回的对象的目标,无论是属性还是变量等等。
所以没有。这是不可能做到的。
如果您想避免一直构建新实例,则必须自己手动进行更改。
x.PluginPathSelector.Path = "some string";
答案 1 :(得分:0)
为了完整性和黑客的方式,你可以通过使用丑陋的方式处理它: