Na mesma solução, tenho dois projetos: P1 e P2. Como posso fazer uso de uma classe de P1 em P2?
Na mesma solução, tenho dois projetos: P1 e P2. Como posso fazer uso de uma classe de P1 em P2?
Respostas:
Basta adicionar referência a P1 de P2
Observe que os tipos em P1 que você deseja acessar diretamente devem ter um nível de acesso suficiente: normalmente, isso significa que eles devem ser tornados públicos.
Paul Ruane está correto, eu acabei de tentar construir o projeto sozinho. Acabei de fazer um SLN inteiro para testar se funcionou.
Eu fiz isso no VC # VS2008
<< (Apenas ajudando outras pessoas que lêem isto também com () comentários)
Passo 1:
Faça uma solução chamada DoubleProject
Passo 2:
Faça o projeto na solução chamada DoubleProjectTwo (para fazer isso, selecione o arquivo de solução, clique com o botão direito -> Adicionar -> Novo Projeto)
Agora tenho dois projetos na mesma solução
Etapa 3:
Como Paul Ruane afirmou. vá para as referências no explorador de soluções (se fechado, está na guia de visualização do compilador). DoubleProjectTwo é aquele que precisa de funções / métodos de DoubleProject, portanto, em DoubleProjectTwo, faça a referência do mouse direito lá -> Adicionar -> Projetos -> DoubleProject.
Passo 4:
Inclua a diretiva para o namespace:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DoubleProject; <------------------------------------------
namespace DoubleProjectTwo
{
class ClassB
{
public string textB = "I am in Class B Project Two";
ClassA classA = new ClassA();
public void read()
{
textB = classA.read();
}
}
}
Passo 5:
Faça algo me mostrar a prova dos resultados:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DoubleProject
{
public class ClassA //<---------- PUBLIC class
{
private const string textA = "I am in Class A Project One";
public string read()
{
return textA;
}
}
}
O principal
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DoubleProjectTwo; //<----- to use ClassB in the main
namespace DoubleProject
{
class Program
{
static void Main(string[] args)
{
ClassB foo = new ClassB();
Console.WriteLine(foo.textB);
Console.ReadLine();
}
}
}
Isso DEVE resolver
Espero que isto ajude
EDIT ::: whoops esqueceu a chamada do método para realmente alterar a string, não faça o mesmo :)
Com muita frequência, um novo desenvolvedor faz esta pergunta simples, que é um problema comum especificamente com IDE do Visual Studio. Poucas pessoas respondem à pergunta específica e freqüentemente a criticam ou dão "palpites" para soluções que não respondem aos problemas comuns. O primeiro problema comum é que o IDE leva você a criar novos projetos em vez de adicionar novos arquivos (.java, .py, .cpp, .c) à solução existente (por padrão, ele cria uma nova solução) a menos que você altere o nome do projeto e adicionar à solução atual. Esse problema ocorre para pastas de projeto Python, java, c #, C ++ e C.
Isso não acontece quando você adiciona outro projeto usando os comandos new> project> project type do IDE. O problema aqui é que o novo projeto está armazenado em um diretório diferente dos arquivos de código do cliente ou da interface do usuário existentes. Para criar um novo "arquivo" no mesmo espaço de projeto em vez de um novo projeto, o iniciante precisa fazer o seguinte que a Microsoft não fará por você e até mesmo o desvia do óbvio intuitivo por padrão.
AGORA, as recomendações de código para importar bibliotecas ou usar namespaces funcionarão conforme descrito nos comentários acima e você não precisa alterar instruções de caminho ou alterar caminhos de soluções e nomes de soluções que a Microsoft não permitirá que você altere facilmente (ou seja, você pode alterar o nomes de arquivos ou nomes de projetos, mas o IDE não mudará automaticamente o caminho do projeto ou os nomes dos caminhos da solução).
A seguir está um exemplo de Python, mas funciona de maneira semelhante para C #, java ou C / C ++ usando os includes, namespaces ou usando comandos de código apropriados para cada linguagem para localizar código em outras classes / projetos no MESMO ESPAÇO DE DIRETÓRIO.
O arquivo do aplicativo "hello world" importando de outros arquivos de código no mesmo diretório.
Observe que os delimitadores de espaço em branco do Python não vão espaçar corretamente neste editor de comentários stackoverflow:
print ("test")
from CIXMPythonFacade import ClassA
c1=ClassA
c1.methodA()
from CIXMPythonFacade import functionA
functionA()
class ClassName(object):
def __init__(object, parameter):
object.parameter = value
O arquivo de biblioteca ou arquivo "façade" contendo classes, métodos ou funções que você deseja importar.
class class1(object):
"""description of class"""
class ClassA(object):
print ("test2")
def methodA():
print ("test3")
def functionA ():
print ("test4")
return (0)
pass
AGORA, como você realmente resolve a bagunça para a qual o IDE o leva? Para importar código de outro arquivo no mesmo espaço de diretório, você adiciona uma referência a ele.
OK, agora que você tem esse problema resolvido, como você realmente vincula dois projetos separados no mesmo espaço de solução?
A Microsoft realmente precisa corrigir esses problemas para que você possa criar intuitivamente o que a maioria das pessoas deseja criar como novos arquivos nos mesmos diretórios e remover soluções selecionando-as e excluindo-as do IDE. Iniciantes ficam tão frustrados com as declarações de caminho de diretório tão flexíveis para desenvolvedores experientes, mas tão injustas para novos desenvolvedores em seus padrões.
Espero que isso realmente ajude vocês, novatos, e impeça desenvolvedores experientes de dar respostas erradas que não funcionam para vocês. Eles presumem que você já entende as instruções de caminho e apenas deseja digitar o código certo ... que é também o motivo do túnel tentar corrigir seu código, mas não o ajuda a corrigir o problema. Este é provavelmente o problema mais comum continuamente descrito no stackoverflow com respostas erradas que não funcionam para novos programadores.
O primeiro passo é fazer P2 referência P1 fazendo o seguinte
Em seguida, você precisa se certificar de que as classes em P1 são acessíveis para P2. A maneira mais fácil é fazê-los public
.
public class MyType { ... }
Agora você deve ser capaz de usá-los no P2 por meio de seu nome totalmente qualificado. Supondo que o namespace de P1 seja Projeto1, o seguinte funcionaria
Project1.MyType obj = new Project1.MyType();
A forma preferida, porém, é adicionar um usando para Project1
para que você possa usar os tipos sem qualificação
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
Se você tiver dois projetos em uma pasta de solução. Basta adicionar a Referência do Projeto em outra. Usando o Namespace, você pode obter as classes. Ao criar o objeto para essa classe exigida. Chame o método que você deseja.
FirstProject:
class FirstClass()
{
public string Name()
{
return "James";
}
}
Adicione aqui referência ao Segundo Projeto
SecondProject:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
No projeto P1 torne a classe pública (se já não estiver). Em seguida, adicione uma referência de projeto (em vez de uma referência de arquivo, um erro que encontrei ocasionalmente) em P2. Adicione uma instrução using em P2 no local correto e comece a usar a classe de P1.
(Para mencionar isso: a alternativa para tornar a aula pública seria tornar P2 um amigo de P1. Esta é, no entanto, improvável que seja a resposta que você está procurando, pois teria algumas consequências. Portanto, continue com a sugestão acima.)
Digamos que sua classe no projeto 2 se chame MyClass.
Obviamente, primeiro referencie seu projeto 2 nas referências no projeto 1, então
using namespaceOfProject2;
// for the class calling bit:
namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
portanto, sempre que quiser fazer referência a essa classe, digite project2Class. Além disso, certifique-se de que a aula seja pública também.
Tive um problema com diferentes estruturas de destino.
Eu estava fazendo tudo certo, mas simplesmente não conseguia usar a referência em P2. Depois de definir a mesma estrutura de destino para P1 e P2, funcionou perfeitamente.
Espero que ajude alguém
The name ... does not exist in the current context. Cannot resolve symbol ...
até que eu alterasse as estruturas de destino dos projetos para corresponder. (Clique com o botão direito do mouse no projeto e vá para Project -> Properties -> Target framework
para alterar isso.)