Variável do Tipo Genérico
Olá pessoal,
Eu tenho a seguinte situação:
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?
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
Curtidas 0
Respostas
Robson Alves
02/01/2013
Pra você declara uma váriavel genérica, ela só vai existir dentro uma classe do mesmo tipo.
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.
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.
GOSTEI 0
Weslei Santos
02/01/2013
Olá Robson,
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!
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!
GOSTEI 0
Robson Alves
02/01/2013
Você pode usar o tipo genérico var.
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.
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.
GOSTEI 0
José
02/01/2013
Olá amigos, como aparentemente a duvida foi solucionada, vou dar o tópico por concluído.
Obrigado pela participação de todos.
Obrigado pela participação de todos.
GOSTEI 0