【发布时间】:2015-11-17 16:39:34
【问题描述】:
我目前正在使用隐式运算符从 Class 转换和转换为 Class2。
但我想做的是,每当我提到 foo (Class<Class2>) 时,我都希望返回 Goo(Class) 以便我可以直接访问它的公共属性,而不必先将其转换为新变量。
换句话说,我希望当我访问Class<Class> 时,我希望Goo 被返回。
我知道我可能无法正确解释,因此请随时在评论部分提问,以便我可以尝试更好地填写我的意思。提前致谢!
class Class<T> where T : new()
{
public T Goo;
public Class() { Goo = new T(); }
public static implicit operator T(Class<T> Loo)
{
return Loo.Goo;
}
}
class ClassX
{
public byte[] SharedData;
public ClassX() { }
}
class Class2 : ClassX
{
public byte Data;
public Class2() { }
}
class Class3 : ClassX
{
public string Data;
public Class3() { }
}
class Program
{
static void Main(string[] args)
{
Class<Class2> foo = new Class<Class2>();
Class2 poo = foo;
foo.Data = 0xFF; // Error - I want this to work, tho.
poo.Data = 0xFF; // Works - Not what I want to use.
System.Console.ReadLine();
}
}
编辑 #1:更新代码。
【问题讨论】:
-
代理类之类的?
-
如果我猜对了,您希望能够在
.Data访问Goo的地方执行new Class<Class2>().Data = 0xFF? -
我更新了代码。 @Diryboy 界面对我来说没有我想要的方式。所以,我猜不是代理类。
-
@Bauss 是的,没错!
-
好吧,如果你想创建它的实例,那是不可能的。因为
.Data将引用左侧变量而不是Class的新实例。您可以访问.Data,但每次都转换为T,例如((Class2)foo).Data,我建议将Data的属性添加到ClassX,尽管类型为object,以便在ClassX的每个实例中允许不同的类型避免泛型。
标签: c# class casting operator-keyword implicit