如何从一个C#项目中使用另一个C#项目的类
在同样的解决scheme中,我有两个项目:P1和P2。 我怎样才能在P2中使用一个P1类?
只需添加对P2的引用即可
- 在“解决scheme资源pipe理器”树中,展开P2项目,然后右键单击该项目,然后从菜单中select“添加引用”。
- 在“添加引用”对话框中,select“项目”选项卡并select您的P1项目。
- 如果您使用的是名称空间,则需要通过在P2中的文件中添加“using”语句来导入您的P1types的名称空间。
请注意,您希望直接访问的P1中的types必须具有足够的访问级别:通常这意味着它们必须公开。
保罗·鲁恩(Paul Ruane)是正确的,我刚刚尝试自己build立这个项目。 我只是做了一个完整的SLN来testing它是否工作。
我在VC#VS2008中做了这个
(只是帮助其他人阅读这个以及()评论)
步骤1:
制作称为DoubleProject的解决scheme
第2步:
使项目在解决scheme名为DoubleProjectTwo(要做到这一点select解决scheme文件,右键单击 – >添加 – >新build项目)
我现在有两个项目在相同的解决scheme
第三步:
正如Paul Ruane所言。 转到解决scheme资源pipe理器中的引用(如果closures,则在编译器的视图选项卡中)。 DoubleProjectTwo是一个需要DoubleProject的function/方法,所以在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(); } } }
第五步:
让事情certificate我的结果:
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(); } } }
这应该够了吧
希望这可以帮助
编辑:::哎呀忘记方法调用实际上改变string,不要做同样的:)
第一步是通过执行以下操作来使P2参考P1
- 右键单击项目,然后select“添加引用”
- 转到“项目”选项卡
- selectP1并点击确定
接下来,您需要确保P1中的课程可以通过P2访问。 最简单的方法就是让它们public
。
public class MyType { ... }
现在,您应该可以通过完全限定的名称在P2中使用它们。 假设P1的命名空间是Project1,那么下面的工作
Project1.MyType obj = new Project1.MyType();
首选的方法是为Project1
添加一个使用,以便您可以使用没有限定的types
using Project1; ... public void Example() { MyType obj = new MyType(); }
新开发人员经常会问这个简单的问题,这是Visual Studio IDE的一个常见问题。 很less有人回答具体的问题,经常对这个问题进行批评或者给出“猜测”来解决那些不能回答常见问题的解决scheme。 第一个常见的问题是IDE导致您创build新项目,而不是将新文件(.java,.py,.cpp,.c)添加到现有解决scheme(默认情况下会创build新解决scheme),除非更改项目名称并添加到当前的解决scheme。 这个问题发生在Python,java,c#,C ++和C工程文件夹中。
新开发人员select“新build>项目>项目名称并将解决scheme目录更改为”使用相同的解决scheme“仍会在同一个解决scheme空间中创build一个新的”项目“,但与当前用户界面文件或命令不在同一个目录空间在创build和运行项目或解决scheme时仍然会导致“包未find”错误的问题,这就是为什么上面对导入包,类,方法和函数的编码build议只起作用(因而不能回答问题)当“库”文件或“单独的行为”文件不仅在相同的解决scheme目录path中,而且在同一个“用户界面”或“命令shell”应用程序目录空间中时,这不会发生使用IDE的新build>项目>项目types命令,这里的问题是新项目存储在与现有的客户端或用户界面代码文件不同的目录下,要在同一个项目空间中创build一个新的“文件”日 一个新的项目,初学者需要做以下的事情,微软不会为你做,甚至误导你远离直观明显的默认。
- select要将新行为导入(从另一个文件)的“应用程序”
- select项目>添加新项目
- select“程序文件模板types”,如filetype.py,filetype.java,filetype.c,filetype.cpp,filetype.C#等,或者库类文件types(创build时看到的启动文件选项一个新的应用程序项目或创build一个新的库项目)。
- 在您的项目中创build一个具有默认名称的新文件名。
- 将文件的默认名称更改为像library.py或façade.java等
现在,导入库或使用名称空间的代码build议将按照上述注释中的描述工作,您不必更改path声明或更改解决schemepath和解决scheme名称,Microsoft不会让您轻松更改(即,您可以更改文件名或项目名称,但IDE不会自动更改项目path或解决schemepath名称)。
以下是一个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带你进入的混乱? 要从同一目录空间中的另一个文件导入代码,请添加对其的引用。
- select应用程序文件
- select项目>添加引用
- select正确的目录path可见的文件名(检查它)
- 解释器,代码检查器和/或编译器现在可以使用该参考。
好了,现在你已经解决了这个问题,你如何将两个单独的项目连接到同一个解决scheme空间?
- 您必须同时使用索引器或“智能感知”选项和编译器/解释器,并且实际检查或更改/添加目录path语句,而不是指向您的“第二个”项目或解决scheme空间的内容。 当你修改path或者改变pathvariables到你的工作区以及作为不同目录空间的项目的特定位置时,编译器和代码分析器可以find这些库,headers.h,名称空间,项目或文件位置。
- 要删除你错误创build的旧项目更糟糕。 您必须退出Visual Studio IDE,打开Windows资源pipe理器,转到工作区目录… documents \ visualstudio xxx \ solutionname \ packagenameselect文件或文件夹,右键单击并“删除”文件或文件夹。
- 当您重新进入IDE并select打开的解决scheme或打开软件包/解决scheme时,旧的文件和解决scheme/软件包名称不见了,就像他们误导性的path语句一样,即使您已更改,编译器和代码分析器也无法查看旧的目录文件名和改变项目名称,它不会改变它的目录path。
微软确实需要解决这些问题,以便您可以直观地创build大多数人希望在相同目录中创build的新文件,并通过从IDE中select并删除它们来删除解决scheme。 初学者对于经验丰富的开发者非常灵活的目录path陈述感到非常沮丧,但是对于新开发者来说,在默认情况下是如此不公平。
希望这真的可以帮助你们,并阻止经验丰富的开发人员给你错误的答案,不适合你。 他们假设你已经理解path声明,只是想input正确的代码…这也是为什么隧道试图纠正你的代码,但没有帮助你解决问题。 这可能是最常见的问题,不能用新程序员的错误答案在计算器上进行描述。
在项目P1中公开课程(如果还没有的话)。 然后添加一个项目引用(而不是文件引用,偶尔遇到的一个错误)给P2。 在正确的地方在P2中添加使用语句并开始使用P1中的类。
(要提到这一点:公开课的另一种方法是让P2成为P1的朋友,但这不太可能成为你后来的答案,因为这样做会造成一些后果,所以坚持上面的build议)。
说你项目2中的class级叫做MyClass。
显然,首先在项目1中引用项目2
using namespaceOfProject2; // for the class calling bit: namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
所以每当你想引用那个类时,你inputproject2Class。 另外确保class级也是公开的。
如果在一个解决scheme文件夹中有两个项目,只需将该项目的引用添加到另一个。使用命名空间,您可以获得类。 在为请求的类创build对象时。 调用你想要的方法。
FirstProject:
class FirstClass() { public string Name() { return "James"; } }
这里添加对第二个项目的引用
SecondProject:
class SeccondClass { FirstProject.FirstClass obj=new FirstProject.FirstClass(); obj.Name(); }