অন্য সি # প্রকল্পের সাথে কীভাবে একটি সি # প্রকল্পের একটি শ্রেণি ব্যবহার করবেন


উত্তর:


65

পি 2 থেকে পি 1 তে কেবল রেফারেন্স যুক্ত করুন


12
ক্লাসটি অ-সর্বজনীন হলে বা পি 2 পি 1 এর বন্ধু হলে এটি কাজ করবে না।
মানফ্রেড

7
এক্ষেত্রে আপনার কাছে 3 টি বিকল্প রয়েছে: 1) 2 টি প্রকল্পের সংমিশ্রণ 2) শ্রেণিটিকে অভ্যন্তরীণ করুন - এবং পি 2 কে "ইন্টার্নালভিজিবলতো" বৈশিষ্ট্য হিসাবে যুক্ত করুন (আরও তথ্য এখানে: এমএসডিএন.মাইক্রোসফটকম / en-us / library/… )। 3) উপরের কোনওটি যদি না করা যায় - আপনাকে P2 থেকে P1 ক্লাসটি ইনস্ট্যান্ট করতে এবং অনুরোধ করার জন্য প্রতিচ্ছবি ব্যবহার করতে হবে
নিসিম

21
আমি আরও বিস্তৃত উত্তর পছন্দ করতাম। এটি প্রায় ব্যঙ্গাত্মক বোধ করে।
21

5
একটি উদাহরণ আরও ভাল হত।
পল আলেকজান্ডার

1
এছাড়াও, দুটি প্রকল্পই একই .NET কাঠামোর লক্ষ্যবস্তু করা দরকার। 'অ্যাপ্লিকেশন' ট্যাবে প্রতিটি প্রকল্পের বৈশিষ্ট্যগুলি পরীক্ষা করে সেখানে 'টার্গেট ফ্রেমওয়ার্ক' থাকা উচিত। উভয় প্রকল্পের এখানে একই কাঠামো লক্ষ্য করা প্রয়োজন।
ট্র্যাভিস

192
  1. 'সলিউশন এক্সপ্লোরার' ট্রিটিতে, পি 2 প্রকল্পটি প্রসারিত করুন এবং তারপরে প্রকল্পটিতে ডান ক্লিক করুন এবং মেনু থেকে 'রেফারেন্স যুক্ত করুন' নির্বাচন করুন।
  2. 'রেফারেন্স যুক্ত করুন' কথোপকথনে, 'প্রকল্পগুলি' ট্যাবটি নির্বাচন করুন এবং আপনার P1 প্রকল্পটি নির্বাচন করুন।
  3. আপনি যদি নেমস্পেস ব্যবহার করছেন তবে আপনার পি 2-তে আপনার ফাইলগুলিতে 'ব্যবহার করে' স্টেটমেন্ট যুক্ত করে আপনার পি 1 টাইপগুলির জন্য নেমস্পেসগুলি আমদানি করতে হবে।

দ্রষ্টব্য যে আপনি যেভাবে P1 এ সরাসরি অ্যাক্সেস করতে চান সেগুলির পর্যাপ্ত অ্যাক্সেসের স্তর থাকতে হবে: সাধারণত এর অর্থ এগুলি অবশ্যই সর্বজনীন করা উচিত।


দুর্দান্ত পরামর্শ, স্যার। আমি লিঙ্কগুলি পেস্ট করতাম, তবে প্রতিবার যখনই আমি কোনও ফাইলের পথ পরিবর্তন করি তখন সেগুলি আপডেট করতে হয়েছিল। একটি প্রকল্পের রেফারেন্স সহ সবই অনেক সহজ। ধন্যবাদ!
ইনইডহেল্প

2
আপনার যদি ইতিমধ্যে পি 1 এ পি 2 এর একটি রেফারেন্স থাকে তবে কী হবে? উপরের কাজটি করার ফলে একটি "বিজ্ঞপ্তি নির্ভরতা" তৈরি হবে ...
কলম্বে

4
@ কলমডে হ্যাঁ এটা হবে। তৃতীয় প্রকল্পে আপনি যে উপাদানগুলি ভাগ করতে চান সেগুলি আপনাকে বিমূর্ত করতে হবে, যা আপনি কল্পনাপ্রসূতভাবে পি 3 উপাধি দিতে পারেন, যা অন্য দুটি প্রকল্প দ্বারা রেফারেন্স করা হয়েছে।
পল রুউন

নন-নেট বিকাশকারী হিসাবে, আমি সত্যিই মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত ... ধন্যবাদ পল (এক্স 2)
আইফসফক্স

16

পল রুয়ান সঠিক, আমি নিজেই প্রকল্পটি তৈরির চেষ্টা করেছি। আমি এটির কাজ করে কিনা তা পরীক্ষা করার জন্য কেবল একটি সম্পূর্ণ এসএলএন তৈরি করেছি।

আমি এটি ভিসি # ভিএস ২০০৮ এ তৈরি করেছি

<< (এই মন্তব্যগুলি পড়ার পাশাপাশি অন্যান্য ব্যক্তিকে সহায়তা করুন () মন্তব্যগুলি)

ধাপ 1:

ডাবলপ্রজেক্ট নামক সমাধান করুন

ধাপ ২:

ডাবলপ্রজেক্টটউ নামে সমাধানে প্রকল্প তৈরি করুন (এটি করতে সমাধান ফাইলটি নির্বাচন করতে ডান ক্লিক করুন -> যুক্ত করুন -> নতুন প্রকল্প)

আমি এখন একই সমাধান দুটি প্রকল্প আছে

ধাপ 3:

যেমনটি পল রুয়ান জানিয়েছেন। সমাধান এক্সপ্লোরারের রেফারেন্সগুলিতে যান (যদি এটি সংকলকের ভিউ ট্যাবে থাকে তবে)। ডাবলপ্রজেক্টটু হ'ল ডাবলপ্রজেক্টের একমাত্র ফাংশন / পদ্ধতিগুলির প্রয়োজন তাই ডাবলপ্রজেক্টটিতে দুটি ডান মাউস রেফারেন্স -> যুক্ত -> প্রকল্পসমূহ -> ডাবলপ্রজেক্ট।

ধাপ 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();
        }
    }
}

যে কৌশলটি করা উচিত

আশাকরি এটা সাহায্য করবে

সম্পাদনা ::: ওফস পদ্ধতিটি কলটি আসলে ভুলে গিয়েছিল স্ট্রিংটি পরিবর্তন করতে, একই রকম করবেন না :)


9

সবসময় প্রায়শই নতুন বিকাশকারী এই সাধারণ প্রশ্নটি জিজ্ঞাসা করে যা বিশেষত ভিজ্যুয়াল স্টুডিও আইডিইর ক্ষেত্রে একটি সাধারণ সমস্যা। খুব কম লোকই নির্দিষ্ট প্রশ্নের উত্তর দেয় এবং প্রায়শই প্রশ্নের সমালোচনা করে বা সমাধানের জন্য "অনুমান" দেয় যা সাধারণ সমস্যার উত্তর দেয় না। প্রথম সাধারণ সমস্যা হ'ল আইডিই আপনাকে প্রকল্পের নাম পরিবর্তন না করে বিদ্যমান সমাধানে নতুন ফাইল (.জাভা, .পিপি, .সিপি, .সি) যুক্ত করার পরিবর্তে নতুন প্রকল্প তৈরি করতে পরিচালিত করে (ডিফল্টরূপে এটি একটি নতুন সমাধান তৈরি করে) এবং বর্তমান সমাধান যোগ করুন। পাইথন, জাভা, সি #, সি ++ এবং সি প্রকল্প ফোল্ডারগুলির ক্ষেত্রে এই সমস্যা দেখা দেয়।

আপনি যখন আইডিইর নতুন> প্রকল্প> প্রকল্পের টাইপ কমান্ড ব্যবহার করে অন্য প্রকল্প যুক্ত করেন তখন এটি ঘটে না। এখানে সমস্যাটি হ'ল নতুন প্রকল্পটি বিদ্যমান ক্লায়েন্ট বা ব্যবহারকারীর ইন্টারফেস কোড ফাইলের চেয়ে আলাদা ডিরেক্টরিতে সঞ্চিত। নতুন প্রকল্পের পরিবর্তে একই প্রকল্পের জায়গাতে একটি নতুন "ফাইল" তৈরি করার জন্য শিক্ষানবিশকে নিম্নলিখিতটি করা দরকার যা মাইক্রোসফ্ট আপনার জন্য করে না এবং এমনকি আপনাকে ডিফল্টরূপে স্বজ্ঞাত স্বচ্ছ থেকে দূরে সরিয়ে দেয়।

  1. আপনি নতুন আচরণটি আমদানি করতে চান "অ্যাপ্লিকেশন" নির্বাচন করুন (অন্য ফাইল থেকে)
  2. প্রকল্প নির্বাচন করুন> নতুন আইটেম যুক্ত করুন
  3. "প্রোগ্রাম ফাইল টেম্পলেট টাইপ" যেমন ফাইল টাইপ.পি, ফাইল টাইপ.জাভা, ফাইল টাইপ.সি., ফাইল টাইপ.সি.পি., ফাইল টাইপ.সি # ইত্যাদি নির্বাচন করুন বা একটি লাইব্রেরি ক্লাস ফাইল টাইপ (আপনি যখন তৈরি করবেন তখন স্টার্টআপ ফাইল অপশন ছাড়া অন্য কিছু নির্বাচন করুন) একটি নতুন অ্যাপ্লিকেশন প্রকল্প বা একটি নতুন গ্রন্থাগার প্রকল্প তৈরি করুন)।
  4. আপনার প্রকল্পে ডিফল্ট নামের একটি নতুন ফাইল নাম তৈরি করা হয়েছে।
  5. ফাইলের ডিফল্ট নামটি লাইব্রেরি.পি বা ফ্যাডেড.জাভা, ইত্যাদিতে পরিবর্তন করুন etc.

এখন লাইব্রেরিগুলি আমদানি করতে বা নেমস্পেসগুলি ব্যবহার করার কোড প্রস্তাবনাগুলি উপরের মন্তব্যে বর্ণিত হিসাবে কাজ করবে এবং আপনাকে পাথের বিবৃতি পরিবর্তন করতে হবে না বা সমাধানের পথগুলি এবং সমাধানের নামগুলি পরিবর্তন করতে হবে না যা মাইক্রোসফ্ট আপনাকে সহজে পরিবর্তন করতে দেয় না (যেমন আপনি পরিবর্তন করতে পারেন ফাইলের নাম বা প্রকল্পের নাম তবে আইডিই স্বয়ংক্রিয়ভাবে প্রকল্পের পথ বা সমাধানের পাথের নাম পরিবর্তন করবে না)।

নীচে একটি পাইথনের উদাহরণ রয়েছে তবে একই ডাইরেক্টরি স্পেসের অন্যান্য শ্রেণি / প্রকল্পের কোড সন্ধানের জন্য অন্তর্ভুক্ত, নেমস্পেস বা প্রতিটি ভাষার উপযুক্ত কোড কমান্ড ব্যবহার করে সি #, জাভা, বা সি / সি ++ এর অনুরূপ কাজ করে।

অ্যাপ্লিকেশন ফাইল "হ্যালো ওয়ার্ল্ড" একই ডিরেক্টরিতে অন্য কোড ফাইল থেকে আমদানি করে।

নোট করুন পাইথন সাদা স্পেস ডিলিটাররা এই স্ট্যাকওভারফ্লো কমেন্ট এডিটরটিতে সঠিকভাবে স্পেসে যাচ্ছে না:

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

এখন আইডিই আপনাকে যে জগাখিচিতে ফেলেছে তা আপনি কীভাবে সমাধান করবেন? একই ডিরেক্টরি স্পেসে অন্য ফাইল থেকে কোড আমদানি করতে আপনি এটিতে একটি রেফারেন্স যুক্ত করেন।

  1. অ্যাপ্লিকেশন ফাইল নির্বাচন করুন
  2. প্রকল্প নির্বাচন করুন> রেফারেন্স যুক্ত করুন
  3. সঠিক ডিরেক্টরি পথের সাথে দৃশ্যমান ফাইলের নামটি চয়ন করুন (এটি পরীক্ষা করুন)
  4. রেফারেন্স এখন দোভাষী, কোড চেকার এবং / অথবা সংকলকের কাছে উপলব্ধ।

ঠিক আছে তাই এখন আপনার সমস্যাটি সমাধান হয়েছে, আপনি কীভাবে একই সমাধান স্থানটিতে দুটি পৃথক প্রকল্পকে একত্রে সংযুক্ত করবেন?

  1. আপনাকে সূচক বা "ইন্টেলিজেন্স" বিকল্প এবং সংকলক / দোভাষী এবং শারীরিকভাবে ডিরেক্টরি পন্থাগুলির বিবরণী পরীক্ষা বা পরিবর্তন / সংযুক্ত করতে হবে যদি তারা আপনার "দ্বিতীয়" প্রকল্প বা সমাধানের জায়গার দিকে কী নির্দেশ করে। যখন আপনি পাথ পরিবর্তন করেন বা পাথের পরিবর্তনশীলগুলি আপনার কর্মক্ষেত্র এবং প্রকল্পগুলির নির্দিষ্ট স্থানগুলিতে পৃথক ডিরেক্টরি স্পেস রয়েছে যা সংকলক এবং কোড বিশ্লেষক তখন এই লাইব্রেরি, শিরোনাম, নামস্থান, প্রকল্প বা ফাইলের অবস্থানগুলি সন্ধান করতে পারেন।
  2. আপনার ভুল করে তৈরি করা পুরানো প্রকল্পগুলি সরাতে এটি আরও খারাপ। আপনাকে ভিজ্যুয়াল স্টুডিও আইডিই থেকে বেরিয়ে আসতে হবে, উইন্ডোজ এক্সপ্লোরার খুলতে হবে, ওয়ার্কস্পেস ডিরেক্টরিতে যেতে হবে ... নথির \ ভিজ্যুয়ালস্টুডিও xxx xx সমাধানের নাম \ প্যাকেজ নামটি ফাইল বা ফোল্ডার নির্বাচন করুন, ডান ক্লিক করুন এবং ফাইল বা ফোল্ডারটি "মুছুন"।
  3. আপনি যখন আইডিই পুনরায় প্রবেশ করেন এবং খোলা সমাধান বা ওপেন প্যাকেজ / সমাধান নির্বাচন করেন, তখন পুরানো ফাইল এবং সমাধান / প্যাকেজ নামগুলি তাদের বিভ্রান্তিকর পথের বিবৃতি হিসাবে চলে যায় যা সংকলক এবং কোড বিশ্লেষককে পুরানো ডিরেক্টরিটি দেখার জন্য বোকা বানায় যদিও আপনি পরিবর্তন করেছেন তবুও ফাইলের নাম এবং প্রকল্পের নাম পরিবর্তন করা হয়েছে, এটি এর সাথে ডিরেক্টরি পথ পরিবর্তন করে না।

মাইক্রোসফ্টকে সত্যই এই সমস্যাগুলির সমাধান করতে হবে যাতে আপনি একই ডিরেক্টরিগুলিতে বেশিরভাগ লোকেরা নতুন ফাইল হিসাবে কী তৈরি করতে চান তা অন্তর্নিহিতভাবে তৈরি করতে পারেন এবং সেগুলি নির্বাচন করে এবং আইডিই থেকে মুছে ফেলে সমাধানগুলি সরিয়ে ফেলতে পারেন। শিক্ষাগত বিকাশকারীদের পক্ষে ডিরেক্টরি পথের বিবৃতিগুলি এতটাই নমনীয়, তবে তাদের ডিফল্টগুলিতে নতুন বিকাশকারীদের পক্ষে এতটা অন্যায়ভাবে শিক্ষানবিশরা হতাশ হন।

আশা করি এটি আপনাকে নতুন ছেলেগুলিতে সত্যই সহায়তা করবে এবং পাকা বিকাশকারীদের আপনাকে ভুল উত্তর দেওয়ার থেকে বিরত রাখবে যা আপনার পক্ষে কার্যকর নয়। তারা ধরে নিয়েছে যে আপনি ইতিমধ্যে পাথের বিবৃতি বুঝতে পেরেছেন এবং কেবলমাত্র সঠিক কোডটি টাইপ করতে চান ... এ কারণেই আপনার কোডটি সংশোধন করার চেষ্টা করার কারণে টানেলটি প্রবেশ করলেও সমস্যাটি সমাধান করতে আপনাকে সহায়তা করে না। স্ট্যাকওভারফ্লোতে ক্রমাগত বর্ণিত ভুল উত্তর সহ নতুন প্রোগ্রামারগুলির পক্ষে কাজ করে না এমন এটি সম্ভবত সবচেয়ে সাধারণ সমস্যা।


এই উত্তরটির সংক্ষিপ্তসার জন্য (ভিএস 2017 এর জন্য): সমাধান এক্সপ্লোরার পি 1 টি ডান ক্লিক করুন >>> যোগ করুন ... >>> রেফারেন্স ... >>> প্রকল্প >>> সমাধান >>> পি 2 চেকবক্সটি পরীক্ষা করুন।
অ্যান্ড্রু পেট

7

প্রথম পদক্ষেপটি নিম্নলিখিতগুলি করে পি 2 রেফারেন্স পি 1 করা

  • প্রকল্পে ডান ক্লিক করুন এবং "রেফারেন্স যুক্ত করুন" নির্বাচন করুন
  • প্রকল্প ট্যাবে যান
  • P1 নির্বাচন করুন এবং ঠিক আছে চাপুন

এরপরে আপনাকে নিশ্চিত করতে হবে যে পি 1 এর ক্লাসগুলি পি 2 এ অ্যাক্সেসযোগ্য। এগুলি তৈরির সবচেয়ে সহজ উপায় public

public class MyType { ... }

এখন আপনার তাদের পুরোপুরি যোগ্য নামের মাধ্যমে পি 2 এ ব্যবহার করতে সক্ষম হওয়া উচিত। P1 এর নেমস্পেসটি প্রজেক্ট 1 হিসাবে ধরে নিলে নিম্নলিখিতটি কাজ করবে

Project1.MyType obj = new Project1.MyType();

যদিও পছন্দসই উপায়টি হল এটির জন্য একটি যুক্ত যুক্তি Project1যাতে আপনি যোগ্যতা ছাড়াই প্রকারগুলি ব্যবহার করতে পারেন

using Project1;
...

public void Example() {
  MyType obj = new MyType();
}

5

যদি আপনার একটি সমাধান ফোল্ডারে দুটি প্রকল্প থাকে ust কেবলমাত্র প্রকল্পের রেফারেন্সটিকে অন্য.নামস্পেসে যুক্ত করে আপনি ক্লাসগুলি পেতে পারেন। এর জন্য পুনঃনির্মাণ শ্রেণীর জন্য অবজেক্ট তৈরি করার সময়। আপনি যে পদ্ধতিটি চান তা কল করুন।

FirstProject:

class FirstClass()
{
   public string Name()
   {
      return "James";
   }
}

এখানে দ্বিতীয় প্রকল্পের রেফারেন্স যুক্ত করুন

SecondProject:

class SeccondClass
{
    FirstProject.FirstClass obj=new FirstProject.FirstClass();
    obj.Name();
}

4

প্রকল্পে পি 1 ক্লাসটিকে সর্বজনীন করুন (যদি এটি ইতিমধ্যে না থাকে)। তারপরে একটি প্রকল্পের রেফারেন্স (কোনও ফাইলের রেফারেন্সের পরিবর্তে, ভুলটি আমি মাঝে মাঝে এসেছি) যোগ করুন P2 এ। সঠিক জায়গায় P2 এ একটি ব্যবহারের বিবৃতি যুক্ত করুন এবং P1 থেকে ক্লাসটি ব্যবহার শুরু করুন।

(এটি উল্লেখ করার জন্য: শ্রেণিকে জনসাধারণের বিকল্প হিসাবে প্রকাশ করা হবে পি 2 কে পি 1 এর বন্ধু বানানো। তবে এটির কিছু পরিণতি হবে বলে আপনার উত্তরটি পরে আসবে বলে সম্ভাবনা কম। সুতরাং উপরের পরামর্শটি ধরে রাখুন))


2

প্রকল্প 2-এ আপনার ক্লাসকে মাইক্লাস বলে।

স্পষ্টতই, প্রথমে আপনার প্রকল্পের রেফারেন্সের পরে প্রথমে 1 প্রকল্পে উল্লেখ করুন

using namespaceOfProject2;

// for the class calling bit:

namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();

সুতরাং যখনই আপনি সেই শ্রেণীর রেফারেন্স করতে চান আপনি প্রজেক্ট 2 ক্লাস টাইপ করুন। আরও নিশ্চিত করুন যে ক্লাসটিও সর্বজনীন।


1

আমি বিভিন্ন লক্ষ্য ফ্রেমওয়ার্ক সঙ্গে একটি সমস্যা ছিল।

আমি সবকিছু ঠিকঠাক করছি, তবে কেবল P2-তে রেফারেন্সটি ব্যবহার করতে পারিনি। আমি পি 1 এবং পি 2 এর জন্য একই লক্ষ্য ফ্রেমওয়ার্কটি সেট করার পরে এটি একটি কবজির মতো কাজ করেছে।

আশা করি এটি কারও সাহায্য করবে


আমি একই সমস্যা ছিল যেমন ত্রুটি সহ The name ... does not exist in the current context. Cannot resolve symbol ...আমি প্রকল্পগুলির লক্ষ্য ফ্রেমগুলি মেলে না যাওয়া পর্যন্ত। (প্রকল্পটিতে ডান ক্লিক করুন এবং এটি Project -> Properties -> Target frameworkপরিবর্তন করতে যান ))
সনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.