Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dri.foruns

[Resolvido] Namespaces

Recommended Posts

Sou iniciante em C#, e um dos pontos que tenho duvida é como chamar um método contido em um Namespace distinto, conforme o código abaixo, tenho um método chamado "imprimir_um()", quero referencia-lo em um outro namespace, conforme mostra o próximo código depois desse:

 

 

using System;

namespace namespace_um
{
	class Program_um
	{

		public void imprimir_um()
		{
			Console.WriteLine("**********");
			Console.WriteLine("Microsoft");
			Console.WriteLine("**********");
		}

		class principal_um
		{
			static void Main(string[] args)
			{
				Program_um x = new Program_um();

				x.imprimir_um();
				Console.ReadLine();


			}
		}
	}
}

Logo abaixo, faço referência ao método "imprimir_um()" pertencente ao "namespace_um". Mas um erro é apresentado:

 

ERRO:The Type or namespace name 'Program_um' does not exist in the namespace 'namespace_dois.namespace_um'(are you missing an assembly reference?

 

Se eu fiz referencia ao "namespace_um" no "namespace_dois" porque esse erro persiste ??

 

using System;

namespace namespace_dois.namespace_um{

	class Program_dois {

		public void imprimir_dois()
		{
			Console.WriteLine("-------");
			Console.WriteLine("Google");
			Console.WriteLine("-------");
		}

		class principal_um
		{
			static void Main(string[] args)
			{
				Program_dois x = new Program_dois();

				x.imprimir_dois();

				namespace_um.Program_um.imprimir_um(); // chamada ao método do namespace anterior.

				Console.ReadLine();


			}
		}
	}
}

Espero que alguêm possa me ajudar ...

Desde já agradeço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) você declarou a classe principal_um dentro da classe program, isso está errado. Declare ela fora.

2) quando você fez:

namespace namespace_um
{
...Seu código...
}
Você criou uma namespace, ótimo. Agora quando você fez:

namespace namespace_dois.namespace_um
{
...Seu código...
}
Você criou uma nova namespace, chamado namespace_dois e dentro dela você criou outra namespace, chamada namespace_um.

Você tem duas namespace_um criadas em locais diferentes, uma na raiz e outra dentro da namepsace_dois. Elas não são as mesmas, as classes que você colocar na namespace_um da raiz não vai estar na sub namespace_um da namespace_dois .

3) Vou dar um exemplo, talvez fique mais claro.

 

namespace NamespaceUm
{
	public class ProgramaUm
	{
		public void ImprimeUm()
		{
			Console.WriteLine("Microsoft");
		}
	}

	public class Program
	{
		public static void Main()
		{
			ProgramaUm prog1 = new ProgramaUm();
			prog1.ImprimeUm(); //Microsoft
			NamespaceDois.ProgramaDois prog2 = new NamespaceDois.ProgramaDois();
			prog2.ImprimeDois(); // Google
		}
	}
}

namespace NamespaceDois
{
	public class ProgramaDois
	{
		public void ImprimeDois()
		{
			Console.WriteLine("Google");
		}
	}
}

Nesse exemplo, quando eu fui chamar uma classe do namespace dois estando na namespace um, eu tive que usar:

NamespaceDois.ProgramaDois prog2 = new NamespaceDois.ProgramaDois();

Existe uma maneira mais fácil de fazer isso que é colocando using NamespaceDois acima da declaração de namespace, assim você não precisa colocar a namespace na frente de cada classe, assim:

 

 

using NamesaceDois;
namespace NamespaceUm
{
//meu código.
}

Espero não ter confundido mais ainda :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Observei atentamente as suas Explicações e Exemplos, novamente obrigado por responder...

 

Mas novamente os erros persistem, logo abaixo está o meu "namespace_dois", faço referência ao mesmo no código posterior.

 

using System;

namespace namespace_dois
{
	class Program_dois{

		public void imprimir_dois(){

			Console.WriteLine("-------");
			Console.WriteLine("Google");
			Console.WriteLine("-------");
		}
	}
}

No código abaixo, faço referência ao "namespace_dois"... Mas erros persistem:

 

 

ERRO: The Type or namespace 'namespace_dois' could not be found (are you missing a using directive or an assembly reference?)

 

Se eu faço a referência da mesma forma do exemplo dado, pq o erro persiste?

 

using System;

namespace namespace_um{

	class Program_um{

		public void imprimir_um(){
			Console.WriteLine("**********");
			Console.WriteLine("Microsoft");
			Console.WriteLine("**********");
		}
	}

		class principal_um{

			static void Main(string[] args){

				Program_um x = new Program_um();
				x.imprimir_um();

								//Referência ao método do namespace anterior...
				namespace_dois.Program_dois prog2 = new namespace_dois.Program_dois();
				prog2.imprimir_dois();

				Console.ReadLine();


			}
		}
	}

Desde já, Agradeço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Copiei exatamente seu código e não deu erro.

Você está usando Visual Studio? As classes estão no mesmo projeto ou em projetos separados?

Se estiver em projetos separados, você precisa adicionar referência ao projeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uso o Microsoft Visual C# Express Edition, as classes estão em projetos separados, mas como faço para adicionar referencia aos métodos estando os mesmos em projetos separados ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lá no solution explorer, dentro do projeto existe uma pasta cinza chamada References, clica com o botão direito sobre ela e vai em Add Reference. Na tela que vai abrir, vai na aba Projects. Escolhe o projeto que você quer referenciar e da um ok.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por responder,

 

Fui no Solution Explorer e na pasta cinza dentro do projeto chamada References cliquei com o botão direito e fui em Add Reference, fui na aba Projects mas estava vazia, sendo que eu tenho diversos projetos que eu fiz pra treinar a Linguagem C#, tem alguma outra configuração para que esses projetos apareçam ??

 

 

Novamente Obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, na aba projects só aparece os projetos da solution corrente.

obs.: Solution é um agrupador de projetos.

 

Para adicionar um projeto que não está na solution você precisa ir no Browse... e procurar a dll do projeto que você quer referenciar. Essa dll fica na pasta Bin.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fui na aba Browse, selecionei o projeto no qual estava querendo referenciar, e a única dll contida dentro de bin estava em Debug e se chama namespace_dois.vshost.exe.manifest, referenciei a mesma e o erro persiste...

 

ERRO: The Type or namespace name 'namespace_dois' could not be found (are you missing a using directive or an assembly reference?)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o manifest se chama namespace_dois.vshost.exe.manifest, então nessa mesma pasta de haver um arquivo chamado namespace_dois.exe, e é esse arquivo que você vai referenciar.

 

O que você está fazendo é estranho, você criou dois aplicativos Console. O certo seria um projeto console e outro projeto do tipo class library (projetos class library geram arquivos .dll), ai você referencia a dll.

 

Tente fazer diferente. Crie uma nova aplicação console, depois disso vai em File -> Add -> New Project. Dai você escolhe ClassLibrary.

Neste caso, os dois projetos vão ficar dentro da mesma solução e você adiciona referência da maneira que eu falei primeiro, indo na aba Project.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu tinha feito foi criar dois projetos Console distintos e tantar referenciar os métodos dos mesmos, mas fiz como você me aconselhou e deu certo, criei um projeto console e outro Class Library e funcionou perfeitamente, agora eu entendi por completo como fazer esse tipo de referência...

 

Novamente gostaria de agradecer pela boa vontade em responder e pela paciência ...

Tudo de Bom...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.