Variável do Tipo Genérico
02/01/2013
0
Eu tenho a seguinte situação:
using System; using System.Collections.Generic; namespace wds.data { public class TRegister : TObject { private TDataSet<TRegister> FDataSet; internal void DataSet(TDataSet<TRegister> ADataSet) { FDataSet = ADataSet; } } }
using System.Collections.Generic; using System.Reflection; namespace wds.data { public class TDataSet<T> : TObject, IDataSet<T> where T : TRegister, new() { private T FRecordBuff; internal void NewRecordBuff() { FRecordBuff = new T(); FRecordBuff.DataSet(this); // ERROR : The best overloaded method match for 'wds.data.TRegister.DataSet // (wds.data.TDataSet<wds.data.TRegister>)' has some invalid arguments. } } }
Como faço para declarar uma variável, de um tipo genérico, em TRegister, sem precisar dizer que TRegister é também de um tipo genérico? Em Java, basta colocar uma ? (ex: private TDataSet<?> FDataSet;) que ele entende perfeitamente. Como posso fazer isso em C#?
Alguém pode me ajudar?
Weslei Santos
Posts
02/01/2013
Robson Alves
Ele não entende que o escopo é genérico.
No caso sua classe TRegister deverá ser declarada como TRegister<T>, assim o tipo passado para a classe é o tipo que será passado para a variável!
A vantagem do genérico e que o tipo não seja discriminado, mas deve existir um tipo.
Já tive necessidades parecidas e nunca vi material que permitisse trabalhar, igual ao que você citou de Java, vou ver se encontro material, pois me interessou tmb.
02/01/2013
Weslei Santos
Obrigado por me responder. O projeto que eu estou desenvolvendo em C# eu o tenho em java web, funcionando perfeitamento. O problema de eu declarar a classe TRegister como classe genérica (TRegister<T>), terei que rever todo o meu diagrama de classe. Como citei anterior mente, em java, basta colocar ? (ex: Class<?>) que ele assume o tipo em runtime. É a primeira vez que desenvolvo em C#. Vou tenhar ver o que eu consigo fazer aqui.
Obrigado!
02/01/2013
Robson Alves
ele comporta qualquer tipo por ser um do tipo object, mas ainda não sei como montar um TRegister<T> sem o T existir no escopo :/
Qualquer solução posta ae.
27/07/2013
José
Obrigado pela participação de todos.
Clique aqui para fazer login e interagir na Comunidade :)