visual 如何將一個C#項目中的類與另一個C#項目一起使用




vs c# (7)

在同一個解決方案中,我有兩個項目:P1和P2。 我怎樣才能在P2中使用一類P1?


第一步是通過執行以下操作來使P2參考P1

  • 右鍵單擊該項目並選擇“添加引用”
  • 轉到項目選項卡
  • 選擇P1並點擊確定

接下來,您需要確保P1中的課程可以通過P2訪問。 最簡單的方法是讓它們public

public class MyType { ... }

現在你應該可以在P2中使用它們的全名。 假設P1的命名空間是Project1,那麼以下內容將起作用

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

首選的方法是為Project1添加一個使用,以便您可以不使用限定的類型

using Project1;
...

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

保羅魯恩是正確的,我剛剛嘗試自己建立這個項目。 我只是做了一個完整的SLN來測試它是否工作。

我在VC#VS2008中做了這個

<<(僅僅幫助其他人閱讀這個以及()評論)

步驟1:

製作名為DoubleProject的解決方案

第2步:

在名為DoubleProjectTwo的解決方案中進行項目(為此選擇解決方案文件,右鍵單擊 - >添加 - >新建項目)

我現在有兩個項目在同一個解決方案中

第三步:

正如Paul Ruane所言。 請轉到解決方案資源管理器中的引用(如果已關閉,則位於編譯器的視圖選項卡中)。 DoubleProjectTwo是一個需要DoubleProject的函數/方法的項目,因此在DoubleProject中有兩個鼠標右鍵引用 - > 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();
        }
    }
}

第五步:

讓某些東西向我展示結果的證據:

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

這應該夠了吧

希望這可以幫助

編輯:::哎呦忘記方法調用來實際改變字符串,不要做同樣的:)


在項目P1中公開該類(如果它尚未)。 然後添加一個項目引用(而不是文件引用,偶爾遇到的一個錯誤)給P2。 在正確的地方在P2中添加使用語句並開始使用P1中的類。

(要提到的是:公開課的另一種方法是讓P2成為P1的朋友,但這不太可能成為你後來的答案,因為它會帶來一些後果,所以堅持上述建議。)


如果在一個解決方案文件夾中有兩個項目,只需將該項目的引用添加到另一個。使用命名空間,您可以獲得這些類。 創建需要請求的類的對象時。 調用你想要的方法。

FirstProject:

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

這裡添加對第二個項目的引用

SecondProject:

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

  1. 在“解決方案資源管理器”樹中,展開P2項目,然後右鍵單擊該項目並從菜單中選擇“添加引用”。
  2. 在“添加引用”對話框中,選擇“項目”選項卡並選擇您的P1項目。
  3. 如果您使用的是名稱空間,那麼您需要通過在P2中的文件中添加'using'語句來為您的P1類型導入名稱空間。

請注意,您希望直接訪問的P1中的類型必須具有足夠的訪問級別:通常這意味著它們必須公開。


假設你在項目2中的課程叫做MyClass。

顯然,首先在項目1中引用你的項目2

using namespaceOfProject2;

// for the class calling bit:

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

所以無論何時您想要引用該類,都可以輸入project2Class。 另外確保班級也是公開的。


很多時候,新開發人員會問這個簡單的問題,這是Visual Studio IDE的一個常見問題。 很少有人回答具體問題,經常對問題進行批評或給出“猜測”以解決不能解決常見問題的解決方案。 第一個常見問題是,IDE會引導您創建新項目,而不是將新文件(.java,.py,.cpp,.c)添加到現有解決方案(默認情況下會創建新解決方案),除非更改項目名稱並添加到當前的解決方案。 這個問題發生在Python,java,c#,C ++和C工程文件夾中。

選擇“新建>項目>項目名稱並將解決方案目錄更改為”使用相同解決方案“的新開發人員仍會在同一解決方案空間中創建一個新的”項目“,但與當前用戶界面文件或命令不在同一目錄空間中在創建和運行項目或解決方案時仍然會導致“包未找到”錯誤的問題,這就是為什麼上面對導入包,類,方法和函數的編碼建議只能起作用(因此不能回答問題)當“庫”文件或“單獨的行為”文件不僅位於相同的解決方案目錄路徑中,而且位於同一個“用戶界面”或“命令外殼”應用程序目錄空間中時,這不會發生項目使用IDE的新建>項目>項目類型命令,這裡的問題是新項目存儲在與現有客戶端或用戶界面代碼文件不同的目錄中,要在同一個項目空間中創建新的“文件”日 初學者需要做一個新的項目,微軟不會為你做,甚至誤導你遠離默認情況下的直觀明顯。

  1. 選擇要將新行為導入(從另一個文件)的“應用程序”
  2. 選擇項目>添加新項目
  3. 選擇“程序文件模板類型”,例如filetype.py,filetype.java,filetype.c,filetype.cpp,filetype.C#等或庫類文件類型(您在創建時看到的啟動文件選項以外的內容一個新的應用程序項目或創建一個新的庫項目)。
  4. 在您的項目中創建一個具有默認名稱的新文件名。
  5. 將文件的默認名稱更改為像library.py或façade.java等。

現在,導入庫或使用名稱空間的代碼建議將按照上述註釋中的描述進行工作,您不必更改路徑聲明或更改Microsoft解決方案路徑和解決方案名稱,以免Microsoft輕鬆更改(即,您可以更改文件名或項目名稱,但IDE不會自動更改項目路徑或解決方案路徑名稱)。

以下是Python示例,但對於C#,java或C / C ++,使用includes,namespaces或使用適合於每種語言的代碼命令來查找SAME DIRECTORY SPACE中的其他類/項目中的代碼。

從同一目錄中的其他代碼文件導入應用程序文件“hello world”。

請注意,在此計算器註釋編輯器中,python空格分隔符不會正確地分隔:

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帶你進入的混亂? 要從同一目錄空間中的另一個文件導入代碼,請添加對其的引用。

  1. 選擇應用程序文件
  2. 選擇項目>添加參考
  3. 選擇正確的目錄路徑可見的文件名(檢查它)
  4. 解釋器,代碼檢查器和/或編譯器現在可以使用該參考。

好,現在你已經解決了這個問題,你如何在同一解決方案空間中將兩個獨立的項目連接在一起?

  1. 如果它們不是指向您的“第二個”項目或解決方案空間的內容,則必須同時使用索引器或“智能感知”選項和編譯器/解釋器,並實際檢查或更改/添加目錄路徑語句。 當您修改路徑或將路徑變量更改為工作區以及作為不同目錄空間的項目的特定位置時,編譯器和代碼分析器可以找到這些庫,headers.h,名稱空間,項目或文件位置。
  2. 要刪除您錯誤創建的舊項目,情況會更糟。 您必須退出Visual Studio IDE,打開Windows資源管理器,轉至工作區目錄... documents \ visualstudio xxx \ solutionname \ packagename選擇文件或文件夾,右鍵單擊並“刪除”文件或文件夾。
  3. 當您重新進入IDE並選擇打開的解決方案或打開軟件包/解決方案時,舊文件和解決方案/軟件包名稱不見了,因為它們誤導性的路徑語句會使編譯器和代碼分析器在舊目錄中看到舊的目錄文件名和改變項目名稱,它不會改變它的目錄路徑。

微軟確實需要解決這些問題,以便您可以直觀地創建大多數人想要在相同目錄中創建的新文件,並通過從IDE中選擇並刪除它們來刪除解決方案。 初學者對於經驗豐富的開發人員非常靈活的目錄路徑陳述感到非常沮喪,但對新開發人員的默認設置很不公平。

希望這真的可以幫助你們,並阻止經驗豐富的開發人員給你錯誤的答案,這些答案不適合你。 他們認為你已經理解了路徑聲明,只想輸入正確的代碼......這也是為什麼隧道試圖糾正你的代碼,但並不能幫助你解決問題。 這可能是最常見的問題,在不能用於新程序員的錯誤答案的情況下,在上不斷描述。





visual-studio