C# - referência a objectos

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?
 
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)
 
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)
{

}
}
 
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.
 
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:
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.
 
Back
Topo