Variável do Tipo Genérico

02/01/2013

0

Olá pessoal,

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

Weslei Santos

Responder

Posts

02/01/2013

Robson Alves

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.
Responder

02/01/2013

Weslei Santos

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!
Responder

02/01/2013

Robson Alves

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.
Responder

27/07/2013

José

Olá amigos, como aparentemente a duvida foi solucionada, vou dar o tópico por concluído.
Obrigado pela participação de todos.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar