1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C# - referência a objectos

Discussão em 'Programação' iniciada por hugolini, 21 de Novembro de 2008. (Respostas: 8; Visualizações: 1256)

  1. hugolini

    hugolini Banido

    Olá a todos,

    Ainda bem principiante na programação em C# e preciva que alguém me esclarecesse uma dúvida (por sinal muito básica).

    Tenho o seguinte código:

    namespace menu
    {
    public class Estrutura
    {

    public static void Cria()
    {
    ArrayList contentor = new ArrayList();
    }

    public static void Grava()
    {
    foreach (envolvente objecto in contentor)
    {

    }
    }



    Quando tento aceder ao ArrayList contentor (que recebe uma série de objectos), a partir do método Grava() recebo o seguinte erro:

    The name 'contentor' does not exist in the current context

    Que está me a escapar?
     
  2. NoNameUser

    NoNameUser Power Member

    porque a variavel "contentor" esta num procedimento aparte exulada:

    public static void Cria()
    {
    ArrayList contentor = new ArrayList();
    }

    Tens que a criar isso como global para poderes aceder de varios sitios, neste caso procedimentos e funções (subprogramas)
     
  3. hugolini

    hugolini Banido

    Ok, parece-me lógico que assim seja. Mas como faço isso?
     
  4. NoNameUser

    NoNameUser Power Member

    Faz isto:

    namespace menu
    {
    public class Estrutura
    {

    ArrayList contentor = new ArrayList();
    (Se quiseres aceder a esta variável em todos os sítios da tua aplicação (por exemplo furmularios ou outras classes) apenas lhe metes atrás public, acho que e public que se mete, mas ve... mas se precisares desta variável apenas para ser acedida nestes subprogramas, deixa como esta.)

    public static void Cria()
    {
    contentor = new ArrayList();
    (aqui ja nao precisas da declarar visto que é a mesma, apenas precisas da limpar, e julgo que assim nao esta bem, mas depois testa)
    }

    public static void Grava()
    {
    foreach (envolvente objecto in contentor)
    {

    }
    }
     
  5. AliFromCairo

    AliFromCairo Power Member

    Boas, dá uma vista de olhos nos livros que se encontram na thread "Bibliografia Recomendada", pois penso que te faria bem ler algo que te desse as bases de OOP. Em relação ao teu problema, tens de colocar esse contentor como membro da classe, ou seja, algo do género:

    Código:
    namespace menu
    {
    public class Estrutura
    {
        private ArrayList contentor;
     
        /* Em OOP, existem construtores para o que penso que queres fazer no método Cria */
        public Estrutura() 
        {
            this.contentor = new ArrayList();
        }
     
        /* para poderes aceder ao contentor, este método não pode ser static */
        public void Grava()
        {
            foreach (envolvente objecto in contentor)
            {
            }
        }
    }
    
    Mas, novamente, aconselho-te a ler um bom livro de OOP. Se tiver exemplos em C#, ainda melhor.
     
  6. Baderous

    Baderous Banido

    O que tu queres, provavelmente, é que contentor seja uma variável de instância que é inicializada com o método Cria:

    Código:
    private ArrayList contentor; 
    
    public void cria() { contentor = new ArrayList(); }
     
    Última edição: 21 de Novembro de 2008
  7. AliFromCairo

    AliFromCairo Power Member

    Para tipos genéricos, podes utilizar a classe List<T>. Por exemplo, se souberes à partida que o teu contentor só irá conter (!) inteiros, podes utilizar List<int> ao invés de ArrayList.
     
  8. hugolini

    hugolini Banido

    Amanha testo isto com mais tempo...desde já agradeço a todo o feed-back, depois informo se consegui fazer o que queria.

    Boa noite.
     
  9. hugolini

    hugolini Banido

    Já consegui fazer o que pretendia...

    Agradeço a todos pela ajuda...boas programações !!! :cool:
     

Partilhar esta Página