W tym samym rozwiązaniu mam dwa projekty: P1 i P2. Jak mogę skorzystać z klasy P1 w P2?
W tym samym rozwiązaniu mam dwa projekty: P1 i P2. Jak mogę skorzystać z klasy P1 w P2?
Odpowiedzi:
Po prostu dodaj odniesienie do P1 z P2
Zwróć uwagę, że typy w P1, do których chcesz uzyskać bezpośredni dostęp, muszą mieć wystarczający poziom dostępu: zazwyczaj oznacza to, że muszą być upublicznione.
Paul Ruane ma rację, właśnie próbowałem samodzielnie zbudować projekt. Właśnie stworzyłem cały SLN, aby sprawdzić, czy działa.
Zrobiłem to w VC # VS2008
<< (Pomaganie tylko innym osobom, które to czytają, dodając () komentarze)
Krok 1:
Stwórz rozwiązanie o nazwie DoubleProject
Krok 2:
Utwórz projekt w rozwiązaniu o nazwie DoubleProjectTwo (w tym celu wybierz plik rozwiązania, kliknij prawym przyciskiem myszy -> Dodaj -> Nowy projekt)
Mam teraz dwa projekty w tym samym rozwiązaniu
Krok 3:
Jak stwierdził Paul Ruane. przejdź do odniesień w eksploratorze rozwiązań (jeśli jest zamknięty, znajduje się na karcie widoku kompilatora). DoubleProjectTwo jest tym, który potrzebuje funkcji / metod DoubleProject, więc w DoubleProjectTwo prawym przyciskiem myszy odnośnik -> Dodaj -> Projekty -> DoubleProject.
Krok 4:
Uwzględnij dyrektywę dotyczącą przestrzeni nazw:
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();
}
}
}
Krok 5:
Zrób coś, co pokaże mi dowód wyników:
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;
}
}
}
Główny
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();
}
}
}
TO POWINNO załatwić sprawę
Mam nadzieję że to pomoże
EDYCJA ::: ups zapomniałem wywołania metody, aby faktycznie zmienić ciąg, nie rób tego samego :)
Zbyt często nowy programista zadaje to proste pytanie, które jest częstym problemem, szczególnie w środowisku IDE programu Visual Studio. Niewiele osób odpowiada na konkretne pytanie i często poddaje je krytyce lub „domysły” rozwiązań, które nie odpowiadają na typowe problemy. Pierwszym częstym problemem jest to, że IDE prowadzi cię do tworzenia nowych projektów, zamiast dodawać nowe pliki (.java, .py, .cpp, .c) do istniejącego rozwiązania (domyślnie tworzy nowe rozwiązanie), chyba że zmienisz nazwę projektu i dodaj do obecnego rozwiązania. Ten problem występuje w przypadku folderów projektów w językach Python, Java, C #, C ++ i C.
Nie dzieje się tak, gdy dodajesz inny projekt za pomocą nowych poleceń> projekt> typ projektu w środowisku IDE. Problem polega na tym, że nowy projekt jest przechowywany w innym katalogu niż istniejące pliki kodu interfejsu klienta lub użytkownika. Aby utworzyć nowy „plik” w tej samej przestrzeni projektu, a nie w nowym projekcie, początkujący musi wykonać następujące czynności, których Microsoft nie zrobi za Ciebie, a nawet odwiedzie Cię od intuicyjnie oczywistych, domyślnych.
TERAZ zalecenia dotyczące kodu dotyczące importowania bibliotek lub korzystania z przestrzeni nazw będą działać zgodnie z opisem w komentarzach powyżej i nie musisz zmieniać instrukcji ścieżki ani zmieniać ścieżek rozwiązań i nazw rozwiązań, których Microsoft nie pozwoli ci łatwo zmienić (tj. Możesz zmienić nazwy plików lub nazwy projektów, ale IDE nie zmieni automatycznie ścieżki projektu ani nazw ścieżek rozwiązań).
Poniżej znajduje się przykład Pythona, ale działa podobnie dla C #, java lub C / C ++ przy użyciu dołączeń, przestrzeni nazw lub przy użyciu poleceń kodowych odpowiednich dla każdego języka, aby znaleźć kod w innych klasach / projektach w TYM SAMYM KATALOGU.
Plik aplikacji „hello world” importujący z innych plików kodu w tym samym katalogu.
Zwróć uwagę, że ograniczniki spacji w Pythonie nie będą poprawnie umieszczane w tym edytorze komentarzy typu 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
Plik biblioteki lub plik „fasady” zawierający klasy, metody lub funkcje, które chcesz zaimportować.
class class1(object):
"""description of class"""
class ClassA(object):
print ("test2")
def methodA():
print ("test3")
def functionA ():
print ("test4")
return (0)
pass
TERAZ, jak właściwie rozwiązać bałagan, w który wprowadza Cię IDE? Aby zaimportować kod z innego pliku w tym samym katalogu, należy dodać do niego odniesienie.
OK, więc teraz, gdy masz już rozwiązany ten problem, jak naprawdę połączyć ze sobą dwa oddzielne projekty w tej samej przestrzeni rozwiązań?
Microsoft naprawdę musi naprawić ten problem, abyś mógł intuicyjnie tworzyć to, co większość ludzi chce utworzyć jako nowe pliki w tych samych katalogach, i usuwać rozwiązania, wybierając je i usuwając je z IDE. Początkujący są tak sfrustrowani, że instrukcje ścieżki katalogu są tak elastyczne dla doświadczonych programistów, ale tak niesprawiedliwe dla nowych programistów w ich domyślnych ustawieniach.
Mam nadzieję, że to naprawdę pomoże wam nowym chłopcom i powstrzyma doświadczonych programistów przed udzielaniem złych odpowiedzi, które nie działają dla was. Zakładają, że już rozumiesz instrukcje ścieżki i po prostu chcesz wpisać właściwy kod ... i właśnie dlatego tunel próbuje poprawić kod, ale nie pomaga w rozwiązaniu problemu. Jest to prawdopodobnie najczęstszy problem nieustannie opisywany w przepływie stosów z błędnymi odpowiedziami, które nie działają dla nowych programistów.
Pierwszym krokiem jest utworzenie odniesienia P2 do P1, wykonując następujące czynności
Następnie musisz się upewnić, że klasy w P1 są dostępne dla P2. Najłatwiej je zrobić public
.
public class MyType { ... }
Teraz powinieneś móc ich używać w P2 za pomocą ich w pełni kwalifikowanej nazwy. Zakładając, że przestrzeń nazw P1 to Project1, wtedy zadziałaby następująca
Project1.MyType obj = new Project1.MyType();
Jednak preferowanym sposobem jest dodanie użycia dla, Project1
aby można było używać typów bez kwalifikacji
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
Jeśli masz dwa projekty w jednym folderze rozwiązania, po prostu dodaj odniesienie projektu do innego. Używając Namespace, możesz uzyskać klasy. Podczas tworzenia obiektu dla tej wymaganej klasy. Wywołaj metodę, którą chcesz.
Pierwszy projekt:
class FirstClass()
{
public string Name()
{
return "James";
}
}
Tutaj dodaj odniesienie do Drugiego Projektu
Drugi projekt:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
W projekcie P1 upublicznij klasę (jeśli jeszcze nie jest). Następnie dodaj odniesienie do projektu (zamiast odniesienia do pliku, błąd, na który się czasami natknąłem) do P2. Dodaj instrukcję using w P2 we właściwym miejscu i zacznij używać klasy od P1.
(Aby wspomnieć o tym: Alternatywą dla upublicznienia klasy byłoby uczynienie P2 przyjacielem P1. Jest to jednak mało prawdopodobne, aby była to odpowiedź, której szukasz, ponieważ miałoby to pewne konsekwencje. Więc trzymaj się powyższej sugestii.)
Powiedz, że Twoja klasa w projekcie 2 nazywa się MyClass.
Oczywiście najpierw odnieś swój projekt 2 do odniesień w projekcie 1
using namespaceOfProject2;
// for the class calling bit:
namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
więc ilekroć chcesz odwołać się do tej klasy, wpisz project2Class. Dodatkowo upewnij się, że zajęcia są również publiczne.
Miałem problem z różnymi platformami docelowymi.
Robiłem wszystko dobrze, ale po prostu nie mogłem użyć odniesienia w P2. Po tym, jak ustawiłem ten sam docelowy framework dla P1 i P2, działało to jak urok.
Mam nadzieję, że to komuś pomoże
The name ... does not exist in the current context. Cannot resolve symbol ...
do czasu zmiany ram docelowych projektów, aby pasowały. (Kliknij projekt prawym przyciskiem myszy i przejdź do, Project -> Properties -> Target framework
aby to zmienić.)