【问题标题】:How to return a property of the class instead of the class itself?如何返回类的属性而不是类本身?
【发布时间】: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&lt;Class2&gt;().Data = 0xFF
  • 我更新了代码。 @Diryboy 界面对我来说没有我想要的方式。所以,我猜不是代理类。
  • @Bauss 是的,没错!
  • 好吧,如果你想创建它的实例,那是不可能的。因为.Data 将引用左侧变量而不是Class 的新实例。您可以访问.Data,但每次都转换为T,例如((Class2)foo).Data,我建议将Data 的属性添加到ClassX,尽管类型为object,以便在ClassX 的每个实例中允许不同的类型避免泛型。

标签: c# class casting operator-keyword implicit


【解决方案1】:

您应该能够非常简单地做到这一点,因为您已经在类中实例化了它。

Class2 main = foo.Goo

【讨论】:

  • 这正是我试图避免做的事情。
  • oo 是的,我错了,我读错了,您基本上是在寻找返回方法,而不是强制转换,您不能直接访问属性吗?即 foo.goo.property?因为 foo 已经有一个作为 goo 的初始化类,所以本质上你是从 foo 返回初始化的类,然后访问属性。
  • 是的,你是对的。铸造它不是我想做的。基本上,我希望 Class 从类型参数 T 继承属性并使它们可以像这样访问: Class foo = new Class(); foo.Data = 0xFF;
  • 我认为这很好地总结了继承泛型​​类型的答案,http://stackoverflow.com/questions/3047830/how-to-inherit-from-a-generic-parameter,但老实说,我不确定为什么在已经有了基础的情况下还需要继承泛型类型通过一些额外的代码“foo.goo.data”来做你需要的事情,因为你已经实例化了泛型类型。因为 goo = 泛型类型,这意味着您传入的任何类,goo 都将是该类类型的实例化。
猜你喜欢
  • 2016-05-10
  • 2022-06-12
  • 2019-08-26
  • 2019-06-28
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
相关资源
最近更新 更多