2015-08-24 1 views
0

Я в настоящее время преобразовываю и отливу из класса в 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(); 
    } 
} 

EDIT # 1: Обновлен код.

+0

Что-то вроде прокси-класса? – Diryboy

+0

Если я получу вас правильно, вы захотите сделать 'new Class () .Data = 0xFF' где' .Data' обращается к 'Goo'? – Bauss

+0

Я обновил код. Интерфейс @Diryboy не подходит мне, как я хочу это делать. Итак, я предполагаю, что это не прокси-класс. –

ответ

0

вы должны иметь возможность сделать это достаточно просто, как вы уже создали его в классе.

Class2 main = foo.Goo 
+1

Это именно то, чего я пытаюсь избежать. –

+0

oo Да, мой плохой я читал это неправильно, ища метод возврата в основном, а не отбрасывать, можете ли вы не просто напрямую обращаться к свойствам? т.е. foo.goo.property? поскольку foo уже имеет инициализированный класс как goo, поэтому, по сути, вы возвращаете инициализированный класс из foo и затем получаете доступ к свойствам. – lilpug

+0

Да, ты прав. Кастинг это не то, что я хочу делать. В принципе, я хотел бы, чтобы класс наследовал свойства из параметра типа T и сделал их доступными так: Class foo = new Класс (); foo.Data = 0xFF; –