Aynı çözümde iki projem var: P1 ve P2. P2'de bir P1 sınıfını nasıl kullanabilirim?
Aynı çözümde iki projem var: P1 ve P2. P2'de bir P1 sınıfını nasıl kullanabilirim?
Yanıtlar:
P2'den P1'e referans eklemeniz yeterlidir
Doğrudan erişmek istediğiniz P1'deki türlerin yeterli erişim düzeyine sahip olması gerektiğini unutmayın: tipik olarak bu, herkese açık hale getirilmeleri gerektiği anlamına gelir.
Paul Ruane haklı, biraz önce projeyi inşa etmeye çalıştım. Çalışıp çalışmadığını test etmek için tam bir SLN yaptım.
Bunu VC # VS2008'de yaptım
<< (Sadece bunu okuyan diğer insanlara () yorumlarla yardımcı olmak)
Aşama 1:
DoubleProject adlı çözüm yapın
Adım 2:
DoubleProjectTwo adlı çözümde Proje oluşturun (bunu yapmak için çözüm dosyasını seçin, sağ tıklayın -> Ekle -> Yeni Proje)
Şimdi aynı çözümde iki projem var
Aşama 3:
Paul Ruane'nin belirttiği gibi. çözüm gezginindeki referanslara gidin (kapalıysa, derleyicinin görünüm sekmesindedir). DoubleProjectTwo, DoubleProject'in ihtiyaç duyduğu işlevlere / yöntemlere sahiptir, bu nedenle DoubleProject'te iki sağ fare referansı vardır -> Ekle -> Projeler -> DoubleProject.
Adım4:
Ad alanı için yönergeyi ekleyin:
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();
}
}
}
Adım 5:
Bana sonuçların kanıtını göster:
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;
}
}
}
Ana
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();
}
}
}
Bu hile yapmalı
Bu yardımcı olur umarım
DÜZENLEME ::: whoops, dizeyi değiştirmek için yöntem çağrısını unuttu, aynısını yapma :)
Çoğu zaman yeni bir geliştirici, özellikle Visual Studio IDE'lerinde ortak bir sorun olan bu basit soruyu sorar. Çok az insan belirli bir soruyu yanıtlar ve genellikle soruyu eleştirir veya genel sorunlara yanıt vermeyen çözümler için "tahminler" yapar. İlk yaygın sorun, proje adını değiştirmediğiniz sürece mevcut çözüme (varsayılan olarak yeni bir çözüm oluşturur) yeni dosyalar (.java, .py, .cpp, .c) eklemek yerine yeni projeler oluşturmanıza neden olan IDE'nin sizi yönlendirmesidir. ve mevcut çözüme ekleyin. Bu sorun Python, java, c #, C ++ ve C proje klasörleri için oluşur.
IDE'nin yeni> proje> proje türü komutlarını kullanarak başka bir proje eklediğinizde bu gerçekleşmez. Buradaki sorun, yeni projenin mevcut İstemci veya Kullanıcı arayüzü kod dosyalarından farklı bir dizinde depolanmasıdır. Yeni proje yerine aynı proje alanında yeni bir "dosya" oluşturmak için, yeni başlayanlar, Microsoft'un sizin için yapmayacağı ve hatta sizi varsayılan olarak sezgisel olarak açık olanlardan uzaklaştıracak şekilde aşağıdakileri yapması gerekir.
ŞİMDİ kitaplıkları içe aktarmak veya ad alanlarını kullanmak için kod önerileri, yukarıdaki yorumlarda açıklandığı gibi çalışacak ve Microsoft'un kolayca değiştirmenize izin vermeyeceği yol ifadelerini veya çözüm yollarını ve çözüm adlarını değiştirmeniz gerekmeyecek (yani, dosya adları veya proje adları ancak IDE proje yolunu veya çözüm yolu adlarını otomatik olarak değiştirmez).
Aşağıdaki bir Python örneğidir, ancak C #, java veya C / C ++ için benzer şekilde çalışır; içerirler, ad alanları veya AYNI DİZİN ALANI içindeki diğer sınıflarda / projelerde kod bulmak için her dile uygun kod komutlarını kullanır.
Aynı dizindeki diğer kod dosyalarından içe aktarılan "merhaba dünya" uygulama dosyası.
Python beyaz boşluk sınırlayıcılarının bu stackoverflow yorum düzenleyicisinde doğru şekilde boşluk bırakmayacağını unutmayın:
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
İçe aktarmak istediğiniz sınıfları, yöntemleri veya işlevleri içeren kitaplık dosyası veya "cephe" dosyası.
class class1(object):
"""description of class"""
class ClassA(object):
print ("test2")
def methodA():
print ("test3")
def functionA ():
print ("test4")
return (0)
pass
ŞİMDİ IDE'nin sizi içine sürüklediği karmaşayı aslında nasıl çözersiniz? Aynı dizin alanındaki başka bir dosyadan kod içe aktarmak için ona bir referans eklersiniz.
Tamam, şimdi bu sorunu çözdünüze göre, iki ayrı projeyi aynı çözüm alanında gerçekten birbirine nasıl bağlarsınız?
Microsoft'un gerçekten ama gerçekten bu sorunu çözmesi gerekiyor, böylece çoğu insanın aynı dizinlerde yeni dosyalar olarak oluşturmak istediklerini sezgisel olarak oluşturabilir ve çözümleri seçerek ve IDE'den silerek kaldırabilirsiniz. Yeni başlayanlar, deneyimli geliştiriciler için çok esnek olan dizin yolu ifadelerinden çok rahatsız oluyor, ancak varsayılan değerlerinde yeni geliştiricilere çok haksızlık ediyor.
Umarım bu, yeni adamlara gerçekten yardımcı olur ve deneyimli geliştiricilerin işinize yaramayan yanlış cevapları vermesini engeller. Zaten yol ifadelerini anladığınızı ve sadece doğru kodu yazmak istediğinizi varsayarlar ... bu da kodunuzu düzeltmeye çalışmakla ilgili tünelin nedenini oluşturur, ancak sorunu çözmenize yardımcı olmaz. Bu muhtemelen, yeni programcılar için işe yaramayan yanlış cevaplarla sürekli olarak stackoverflow'da açıklanan en yaygın sorundur.
İlk adım, aşağıdakileri yaparak P2 referans P1 yapmaktır.
Daha sonra, P1'deki sınıfların P2 tarafından erişilebilir olduğundan emin olmanız gerekir. En kolay yol onları yapmaktır public.
public class MyType { ... }
Artık bunları tam adlarıyla P2'de kullanabilmelisiniz. P1 ad alanının Project1 olduğunu varsayarsak, aşağıdakiler işe yarar
Project1.MyType obj = new Project1.MyType();
Tercih edilen yol Project1, türleri niteliksiz olarak kullanabilmeniz için bir kullanım eklemektir.
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
Bir çözüm klasöründe iki projeniz varsa, Projenin Referansını diğerine eklemeniz yeterlidir. Ad alanını kullanarak sınıfları alabilirsiniz. Bunun için nesneyi oluştururken, gerekli sınıf. İstediğiniz Yöntemi arayın.
FirstProject:
class FirstClass()
{
public string Name()
{
return "James";
}
}
Burada İkinci Projeye referans ekleyin
SecondProject:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
P1 projesinde sınıfı herkese açık hale getirin (henüz değilse). Ardından P2'ye bir proje referansı ekleyin (dosya referansı yerine, ara sıra karşılaştığım bir hata). P2'de doğru yere bir using ifadesi ekleyin ve P1'deki sınıfı kullanmaya başlayın.
(Bundan bahsetmek gerekirse: Sınıfı halka açık hale getirmenin alternatifi, P2'yi P1'e arkadaş yapmaktır. Ancak, bazı sonuçları olacağından, aradığınız cevap bu değildir. Bu nedenle yukarıdaki öneriye sadık kalın.)
Diyelim ki proje 2'deki sınıfınızın adı MyClass.
Açıkçası, önce projeniz 2'ye proje 1'deki referanslar altında referans verin, sonra
using namespaceOfProject2;
// for the class calling bit:
namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
bu nedenle bu sınıfa başvurmak istediğinizde project2Class yazarsınız. Ayrıca sınıfın da herkese açık olduğundan emin olun.
Farklı hedef çerçevelerle ilgili bir sorun yaşadım.
Her şeyi doğru yapıyordum, ancak P2'deki referansı kullanamadım. P1 ve P2 için aynı hedef çerçeveyi belirledikten sonra, harika çalıştı.
Umarım birine yardımcı olur
The name ... does not exist in the current context. Cannot resolve symbol ...Projelerin hedef çerçevelerini eşleşecek şekilde değiştirene kadar aynı sorunu yaşadım. (Projeye sağ tıklayın ve Project -> Properties -> Target frameworkbunu değiştirmek için gidin .)