동일한 솔루션에 P1과 P2의 두 가지 프로젝트가 있습니다. P2에서 P1 클래스를 어떻게 사용할 수 있습니까?
답변
P2에서 P1에 대한 참조를 추가하기 만하면됩니다.
답변
- ‘솔루션 탐색기’트리에서 P2 프로젝트를 확장 한 다음 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 메뉴에서 ‘참조 추가’를 선택합니다.
- ‘참조 추가’대화 상자에서 ‘프로젝트’탭을 선택하고 P1 프로젝트를 선택합니다.
- 네임 스페이스를 사용하는 경우 P2의 파일에 ‘using’문을 추가하여 P1 유형의 네임 스페이스를 가져와야합니다.
직접 액세스하려는 P1의 유형에는 충분한 액세스 수준이 있어야합니다. 일반적으로 이는 공개해야 함을 의미합니다.
답변
Paul Ruane이 맞습니다. 방금 프로젝트를 구축해 보았습니다. 나는 그것이 작동하는지 테스트하기 위해 전체 SLN을 만들었습니다.
VC # VS2008에서 만들었습니다.
<< (() 주석으로 이것을 읽는 다른 사람들을 돕는 것)
1 단계:
DoubleProject라는 솔루션 만들기
2 단계:
DoubleProjectTwo라는 솔루션에서 프로젝트 만들기 (이렇게하려면 솔루션 파일을 선택하고 마우스 오른쪽 단추로 클릭-> 추가-> 새 프로젝트)
이제 동일한 솔루션에 두 개의 프로젝트가 있습니다.
Step3 :
Paul Ruane이 말했듯이. 솔루션 탐색기의 참조로 이동합니다 (닫힌 경우 컴파일러의보기 탭에 있음). DoubleProjectTwo는 DoubleProject의 기능 / 메소드가 필요한 것이므로 DoubleProjectTwo에서 오른쪽 마우스 참조-> Add-> Projects-> DoubleProject.
Step4 :
네임 스페이스에 대한 지시문을 포함하십시오.
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();
}
}
}
Step5 :
결과에 대한 증거를 보여줍니다.
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;
}
}
}
메인
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();
}
}
}
트릭을해야합니다.
도움이 되었기를 바랍니다
편집 ::: 웁스 실제로 문자열을 변경하는 메서드 호출을 잊어 버렸습니다. 동일한 작업을 수행하지 마십시오. 🙂
답변
너무 자주 새로운 개발자는 Visual Studio IDE의 일반적인 문제인이 간단한 질문을합니다. 특정 질문에 대답하는 사람은 거의 없으며 자주 질문을 비판하거나 일반적인 문제에 대답하지 않는 해결책을 “추측”합니다. 첫 번째 일반적인 문제는 IDE가 프로젝트 이름을 변경하지 않는 한 기존 솔루션 (기본적으로 새 솔루션을 생성 함)에 새 파일 (.java, .py, .cpp, .c)을 추가하는 대신 새 프로젝트를 생성하도록 유도한다는 것입니다. 현재 솔루션에 추가하십시오. 이 문제는 Python, Java, C #, C ++ 및 C 프로젝트 폴더에서 발생합니다.
이것은 IDE의 new> project> project 유형 명령을 사용하여 다른 프로젝트를 추가 할 때 발생하지 않습니다. 여기서 문제는 새 프로젝트가 기존 클라이언트 또는 사용자 인터페이스 코드 파일과 다른 디렉토리에 저장된다는 것입니다. 새 프로젝트가 아닌 동일한 프로젝트 공간에 새 “파일”을 만들려면 초보자는 Microsoft가 수행하지 않는 다음 작업을 수행해야하며 기본적으로 직관적으로 명백한 것에서 멀어지게합니다.
- 새 비헤이비어를 가져올 “응용 프로그램”을 선택합니다 (다른 파일에서).
- 프로젝트 선택> 새 항목 추가
- filetype.py, filetype.java, filetype.c, filetype.cpp, filetype.C # 등과 같은 “프로그램 파일 템플릿 유형”또는 라이브러리 클래스 파일 유형 (생성 할 때 표시되는 시작 파일 옵션 이외의 것)을 선택합니다. 새 응용 프로그램 프로젝트 또는 새 라이브러리 프로젝트 만들기).
- 기본 이름을 가진 새 파일 이름이 프로젝트에 생성됩니다.
- 파일의 기본 이름을 library.py 또는 façade.java 등으로 변경하십시오.
이제 라이브러리를 가져 오거나 네임 스페이스를 사용하기위한 코드 권장 사항이 위의 설명에 설명 된대로 작동하며 Microsoft에서 쉽게 변경할 수없는 경로 문을 변경하거나 솔루션 경로 및 솔루션 이름을 변경할 필요가 없습니다 (즉, 파일 이름 또는 프로젝트 이름이지만 IDE는 프로젝트 경로 또는 솔루션 경로 이름을 자동으로 변경하지 않습니다.
다음은 Python 예제이지만 포함, 네임 스페이스를 사용하거나 각 언어에 적합한 코드 명령을 사용하여 동일한 디렉토리 공간의 다른 클래스 / 프로젝트에서 코드를 찾기 위해 C #, Java 또는 C / C ++에서 유사하게 작동합니다.
동일한 디렉토리의 다른 코드 파일에서 가져 오는 응용 프로그램 파일 “hello world”입니다.
이 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
가져올 클래스, 메서드 또는 함수가 포함 된 라이브러리 파일 또는 “façade”파일입니다.
class class1(object):
"""description of class"""
class ClassA(object):
print ("test2")
def methodA():
print ("test3")
def functionA ():
print ("test4")
return (0)
pass
이제 IDE가 당신을 이끄는 혼란을 실제로 어떻게 해결합니까? 동일한 디렉토리 공간에있는 다른 파일에서 코드를 가져 오려면 해당 파일에 대한 참조를 추가합니다.
- 응용 프로그램 파일 선택
- 프로젝트> 참조 추가를 선택하십시오.
- 올바른 디렉토리 경로로 보이는 파일 이름을 선택하십시오 (확인하십시오).
- 이제 인터프리터, 코드 검사기 및 / 또는 컴파일러에서 참조를 사용할 수 있습니다.
이제이 문제가 해결되었으므로 동일한 솔루션 공간에서 두 개의 개별 프로젝트를 실제로 연결하는 방법은 무엇입니까?
- 인덱서 또는 “인텔리 센스”옵션과 컴파일러 / 인터프리터로 이동하여 “두 번째”프로젝트 또는 솔루션 공간을 가리키는 것이 아닌 경우 디렉터리 경로 문을 물리적으로 확인하거나 변경 / 추가해야합니다. 경로를 변경하거나 경로 변수를 작업 공간과 다른 디렉토리 공간 인 프로젝트의 특정 위치로 변경하면 컴파일러와 코드 분석기가 이러한 라이브러리, headers.h, 네임 스페이스, 프로젝트 또는 파일 위치를 찾을 수 있습니다.
- 실수로 만든 오래된 프로젝트를 제거하는 것은 더 나쁩니다. Visual Studio IDE를 종료하고 Windows 탐색기를 열고 작업 공간 디렉토리로 이동합니다. … documents \ visualstudio xxx \ solutionname \ packagename 파일 또는 폴더를 선택하고 마우스 오른쪽 버튼을 클릭하여 파일 또는 폴더를 “삭제”합니다.
- IDE에 다시 들어가서 열린 솔루션 또는 열린 패키지 / 솔루션을 선택하면 이전 파일과 솔루션 / 패키지 이름이 잘못된 경로 문처럼 사라져 컴파일러와 코드 분석기가 변경하더라도 이전 디렉토리를 보도록 속입니다. 파일 이름을 변경하고 프로젝트 이름을 변경하더라도 디렉토리 경로는 변경되지 않습니다.
Microsoft는 실제로 이러한 문제를 해결해야하므로 대부분의 사람들이 동일한 디렉토리에 새 파일로 만들고자하는 것을 직관적으로 만들고 솔루션을 선택하고 IDE에서 삭제하여 제거 할 수 있습니다. 초보자는 노련한 개발자에게는 매우 유연하지만 기본적으로 새로운 개발자에게는 불공평 한 디렉토리 경로 문에 매우 실망합니다.
이것이 정말 새로운 사람들에게 도움이되고 노련한 개발자들이 당신에게 맞지 않는 잘못된 대답을주는 것을 막기를 바랍니다. 그들은 이미 경로 문을 이해하고 올바른 코드를 입력하기를 원한다고 가정합니다. 이것이 코드를 수정하려고 시도 할 때 터널이 들어오는 이유이지만 문제를 해결하는 데 도움이되지 않습니다. 이것은 아마도 새로운 프로그래머에게는 작동하지 않는 잘못된 답변으로 stackoverflow에서 지속적으로 설명되는 가장 일반적인 문제 일 것입니다.
답변
첫 번째 단계는 다음을 수행하여 P2 참조 P1을 만드는 것입니다.
- 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 “참조 추가”를 선택합니다.
- 프로젝트 탭으로 이동
- P1을 선택하고 확인을 누르십시오.
다음으로 P1의 클래스가 P2에 액세스 할 수 있는지 확인해야합니다. 가장 쉬운 방법은 그들을 만드는 것 public
입니다.
public class MyType { ... }
이제 정규화 된 이름을 통해 P2에서 사용할 수 있습니다. P1의 네임 스페이스가 Project1이라고 가정하면 다음이 작동합니다.
Project1.MyType obj = new Project1.MyType();
하지만 선호하는 방법은 using for를 추가하여 Project1
자격없이 유형을 사용할 수 있도록하는 것입니다.
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
답변
하나의 솔루션 폴더에 두 개의 프로젝트가있는 경우 네임 스페이스를 사용하여 다른 프로젝트에 참조를 추가하기 만하면 클래스를 가져올 수 있습니다. requried 클래스에 대한 객체를 만드는 동안. 원하는 방법을 호출하십시오.
FirstProject :
class FirstClass()
{
public string Name()
{
return "James";
}
}
여기에 두 번째 프로젝트에 대한 참조를 추가하십시오.
SecondProject :
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
답변
프로젝트 P1에서 클래스를 공개합니다 (아직 공개하지 않은 경우). 그런 다음 P2에 프로젝트 참조를 추가합니다 (파일 참조가 아니라 가끔 실수로 보았습니다). P2의 올바른 위치에 using 문을 추가하고 P1의 클래스 사용을 시작합니다.
(이것을 언급하자면 : 클래스를 공개하는 대안은 P2를 P1의 친구로 만드는 것입니다. 그러나 이것은 약간의 결과를 초래할 수 있기 때문에 당신이 원하는 대답이 아닐 것입니다. 따라서 위의 제안을 고수하십시오.)