एक ही समाधान में, मेरे पास दो परियोजनाएं हैं: पी 1 और पी 2। मैं पी 2 में पी 1 के वर्ग का उपयोग कैसे कर सकता हूं?
एक ही समाधान में, मेरे पास दो परियोजनाएं हैं: पी 1 और पी 2। मैं पी 2 में पी 1 के वर्ग का उपयोग कैसे कर सकता हूं?
जवाबों:
बस पी 2 से पी 1 का संदर्भ जोड़ें
ध्यान दें कि P1 के प्रकार जिन्हें आप सीधे एक्सेस करना चाहते हैं, उनके पास एक पर्याप्त एक्सेस स्तर होना चाहिए: आमतौर पर इसका मतलब है कि उन्हें सार्वजनिक किया जाना चाहिए।
पॉल रुआन सही है, मैंने सिर्फ प्रोजेक्ट बनाने की कोशिश की है। मैं सिर्फ एक पूरी एसएलएन परीक्षण करने के लिए अगर यह काम किया है।
मैंने इसे VC # VS2008 में बनाया
<< (सिर्फ अन्य लोगों की मदद करना जो इस टिप्पणी के साथ पढ़ते हैं)
चरण 1:
DoubleProject नामक समाधान करें
चरण 2:
DoubleProjectTwo नाम से प्रोजेक्ट बनाएं (इसे करने के लिए समाधान फ़ाइल का चयन करें, राइट क्लिक करें -> जोड़ें -> नई परियोजना)
मेरे पास अब एक ही समाधान में दो परियोजनाएं हैं
चरण 3:
जैसा कि पॉल रुआन ने कहा था। समाधान एक्सप्लोरर में संदर्भ पर जाएं (यदि यह संकलक के दृश्य टैब में बंद है)। DoubleProjectTwo DoubleProjectTwo में एक आवश्यक कार्य / तरीके हैं ताकि DoubleProjectTwo में सही माउस संदर्भ हो -> Add -> Projects -> DoubleProject।
चरण 4:
नाम स्थान के लिए निर्देश शामिल करें:
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();
}
}
}
चरण 5:
मुझे कुछ दिखाओ परिणाम के सबूत:
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();
}
}
}
यह ट्रिक काम आना चाहिए
उम्मीद है की यह मदद करेगा
संपादित करें ::: जो वास्तव में स्ट्रिंग को बदलने के लिए विधि कॉल भूल गया, वही मत करो :)
सभी अक्सर एक नया डेवलपर यह सरल प्रश्न पूछता है जो विशेष रूप से विजुअल स्टूडियो आईडीई के साथ एक आम समस्या है। कुछ लोग विशिष्ट प्रश्न का उत्तर देते हैं और अक्सर प्रश्न की आलोचना करते हैं या समाधान के लिए "अनुमान" देते हैं जो सामान्य समस्याओं का जवाब नहीं देते हैं। पहली आम समस्या यह है कि आईडीई आपको मौजूदा समाधान के लिए नई फ़ाइलों (.java, .py, .cpp, .c) को जोड़ने के बजाय नई परियोजनाएं बनाने की ओर ले जाता है (जब तक कि यह परियोजना का नाम नहीं बदलता है)। और वर्तमान समाधान में जोड़ें। यह समस्या पायथन, जावा, सी #, सी ++ और सी प्रोजेक्ट फ़ोल्डर्स के लिए होती है।
ऐसा तब नहीं होता है जब आप IDE के नए> प्रोजेक्ट> प्रोजेक्ट प्रकार कमांड का उपयोग करके कोई अन्य प्रोजेक्ट जोड़ते हैं। यहां समस्या यह है कि नई परियोजना मौजूदा क्लाइंट या उपयोगकर्ता इंटरफ़ेस कोड फ़ाइलों की तुलना में एक अलग निर्देशिका में संग्रहीत है। नए प्रोजेक्ट के बजाय एक ही प्रोजेक्ट स्पेस में एक नई "फाइल" बनाने के लिए शुरुआत करने वाले को निम्नलिखित करने की आवश्यकता होती है जो Microsoft आपके लिए नहीं करेगा और यहां तक कि आपको डिफ़ॉल्ट रूप से सहज रूप से स्पष्ट से दूर कर देता है।
अब पुस्तकालयों को आयात करने या नाम स्थान का उपयोग करने के लिए कोड की सिफारिशें ऊपर की टिप्पणियों में वर्णित के रूप में काम करेंगी और आपको पथ कथन बदलने या समाधान पथ और समाधान नाम बदलने की आवश्यकता नहीं है जो Microsoft आपको आसानी से बदलने नहीं देगा (अर्थात आप बदल सकते हैं फ़ाइल नाम या प्रोजेक्ट नाम लेकिन IDE स्वचालित रूप से प्रोजेक्ट पथ या समाधान पथ नाम नहीं बदलेगा)।
निम्नलिखित पायथन उदाहरण है, लेकिन समान भाषा में अन्य वर्गों / परियोजनाओं में कोड खोजने के लिए प्रत्येक भाषा में शामिल कोड, नामस्थान या कोड कमांड का उपयोग करके C #, java, या C / C ++ के लिए समान काम करता है।
अनुप्रयोग फ़ाइल "हैलो वर्ल्ड" समान निर्देशिका में अन्य कोड फ़ाइलों से आयात कर रही है।
ध्यान दें कि इस स्टैकओवरफ्लो टिप्पणी संपादक में अजगर सफेद स्थान के सीमांकक सही ढंग से नहीं जा रहे हैं:
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
लाइब्रेरी फ़ाइल या "फ़ेकडे" फ़ाइल जिसमें आप आयात करना चाहते हैं, कक्षाएं, विधियाँ या फ़ंक्शंस हैं।
class class1(object):
"""description of class"""
class ClassA(object):
print ("test2")
def methodA():
print ("test3")
def functionA ():
print ("test4")
return (0)
pass
अब आप वास्तव में उस गंदगी को कैसे सुलझाते हैं जो IDE आपको ले जाता है? उसी निर्देशिका स्थान में किसी अन्य फ़ाइल से कोड आयात करने के लिए आप उसमें एक संदर्भ जोड़ते हैं।
ठीक है तो अब जब आपको यह समस्या हल हो गई है, तो आप वास्तव में एक ही समाधान स्थान में दो अलग-अलग परियोजनाओं को एक साथ कैसे लिंक करते हैं?
Microsoft को वास्तव में, वास्तव में इन समस्याओं को ठीक करने की आवश्यकता है ताकि आप सहजता से यह बना सकें कि अधिकांश लोग एक ही निर्देशिका में नई फ़ाइलों के रूप में क्या बनाना चाहते हैं और समाधानों को हटाकर उन्हें IDE से हटा दें। शुरुआती सीज़न डेवलपर्स के लिए इतनी लचीली डायरेक्टरी पाथ स्टेटमेंट से निराश हो जाते हैं, लेकिन नए डिफॉल्टर्स के साथ ऐसा करना अनुचित है।
आशा है कि यह वास्तव में आपको नए लोगों की मदद करता है और अनुभवी डेवलपर्स को आपको गलत जवाब देने से रोकता है जो आपके लिए काम नहीं करते हैं। वे मान लेते हैं कि आप पहले से ही पथ कथनों को समझते हैं और केवल सही कोड लिखना चाहते हैं ... यही वजह है कि सुरंग आपके कोड को सही करने की कोशिश कर रही है, लेकिन समस्या को ठीक करने में आपकी मदद नहीं करती है। यह शायद सबसे आम समस्या है जो लगातार गलत जवाबों के साथ स्टैकओवरफ्लो पर वर्णित है जो नए प्रोग्रामर के लिए काम नहीं करते हैं।
पहला कदम निम्नलिखित करके P2 संदर्भ P1 बनाना है
आगे आपको यह सुनिश्चित करने की आवश्यकता होगी कि पी 1 में कक्षाएं पी 2 तक पहुंच योग्य हैं। सबसे आसान तरीका उन्हें बनाना है public
।
public class MyType { ... }
अब आप उन्हें पूरी तरह से योग्य नाम के माध्यम से P2 में उपयोग करने में सक्षम होना चाहिए। P1 के नाम स्थान को प्रोजेक्ट 1 मान लें तो निम्नलिखित कार्य करेगा
Project1.MyType obj = new Project1.MyType();
हालांकि पसंदीदा तरीका यह है कि आप इसके लिए एक Project1
योग्यता जोड़ सकते हैं, ताकि आप बिना योग्यता के प्रकारों का उपयोग कर सकें
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
यदि आपके पास एक समाधान फ़ोल्डर में दो परियोजनाएं हैं। बस प्रोजेक्ट के संदर्भ को किसी अन्य में जोड़ें। नामस्थान आप वर्गों को प्राप्त कर सकते हैं। उस पुनर्विकसित वर्ग के लिए वस्तु का निर्माण करते समय। उस विधि को कॉल करें जिसे आप चाहते हैं।
FirstProject:
class FirstClass()
{
public string Name()
{
return "James";
}
}
यहां दूसरी परियोजना का संदर्भ जोड़ें
SecondProject:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
प्रोजेक्ट P1 में वर्ग को सार्वजनिक करें (यदि यह पहले से नहीं है)। फिर एक परियोजना संदर्भ (एक फ़ाइल संदर्भ के बजाय, एक गलती जो मुझे कभी-कभी आई है) पी 2 में जोड़ें। सही जगह पर P2 में एक उपयोग कथन जोड़ें और P1 से कक्षा का उपयोग करना शुरू करें।
(इसका उल्लेख करने के लिए: वर्ग को सार्वजनिक करने का विकल्प पी 2 को P1 बनाने के लिए एक मित्र होगा। हालांकि, इसका उत्तर होने की संभावना नहीं है क्योंकि आप इसके कुछ परिणाम होंगे। इसलिए उपरोक्त सुझाव के साथ रहें।)
प्रोजेक्ट 2 में आपकी कक्षा को MyClass कहा जाता है।
जाहिर है, पहले अपने प्रोजेक्ट 2 को प्रोजेक्ट 1 में संदर्भ के तहत देखें
using namespaceOfProject2;
// for the class calling bit:
namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
इसलिए जब भी आप उस वर्ग को संदर्भित करना चाहते हैं, तो आप प्रोजेक्ट 2 टाइप करें। प्लस यह भी सुनिश्चित करें कि वर्ग सार्वजनिक भी है।
मेरे पास अलग-अलग लक्ष्य ढांचे के साथ एक मुद्दा था।
मैं सब कुछ सही कर रहा था, लेकिन सिर्फ P2 में संदर्भ का उपयोग नहीं कर सका। पी 1 और पी 2 के लिए समान लक्ष्य रूपरेखा निर्धारित करने के बाद, इसने एक आकर्षण की तरह काम किया।
आशा है कि यह किसी की मदद करेगा
The name ... does not exist in the current context. Cannot resolve symbol ...
जब तक कि मैंने मिलान करने के लिए परियोजनाओं के लक्ष्य ढांचे को नहीं बदला। (प्रोजेक्ट को राइट-क्लिक करें और Project -> Properties -> Target framework
इसे बदलने के लिए जाएं।)