如何在C#中导入文件?在ClassA类中实例化ClassB类的技术问询
问题1:如何在C#中导入文件?
其实C#里并没有“导入文件”这个概念哦,咱们是通过命名空间和引用机制来实现不同文件中类的访问的,分两种常见情况:
- 同一个项目下的文件:
如果两个类在同一个命名空间(或者都没写命名空间,默认在全局命名空间),只要类的访问权限允许(比如public或者默认的internal),直接用类名就能创建对象,不需要额外操作。要是类在不同的命名空间里,就在文件顶部用using 目标命名空间;来引入,或者用完整命名空间.类名的方式调用。 - 不同项目/外部dll中的类:
首先得右键你的项目 → 添加 → 引用,把目标项目或者dll文件加进来,然后同样用using引入对应的命名空间,或者用全限定类名来使用。
问题2:在ClassA中创建ClassB对象的问题
先看你给出的代码,首先ClassB里的Console.Writ...应该是拼写失误啦,应该写成Console.WriteLine()才对。
回到核心问题:如果这两个文件在同一个项目、同一个命名空间下,你的代码其实是可以正常运行的,要是出现报错,大概率是这几个原因:
- 命名空间不匹配:
比如ClassA在namespace MyProject里,ClassB在namespace MyProject.Utils里,这时候你需要在ClassA.cs的顶部加上using MyProject.Utils;,或者创建对象时写new MyProject.Utils.ClassB();。 - 编译方式不对(命令行编译时):
如果你用csc ClassA.cs单独编译ClassA,编译器会找不到ClassB的定义,这时候要把两个文件一起编译:csc ClassA.cs ClassB.cs,这样就能生成包含两个类的程序集了。 - 访问修饰符问题:
要是ClassB不是public,而是默认的internal,只要在同一个项目(程序集)里,ClassA还是能访问的;但如果是不同项目,就得把ClassB改成public,或者用InternalsVisibleTo特性来允许跨项目访问。
给你修正后的完整代码示例,放在同一个项目里就能正常运行:
ClassA.cs:
using System; namespace MyApp { public class ClassA { public static void Main(string[] args) { Console.WriteLine("Starting..."); ClassA classA = new ClassA(); } public ClassA() { // 直接创建ClassB对象,因为在同一个命名空间下 ClassB classB = new ClassB(); } } }
ClassB.cs:
using System; namespace MyApp { public class ClassB { public ClassB() { Console.WriteLine("ClassB 已被实例化!"); } } }
另外,如果你用的是Visual Studio、Rider这类IDE,只要把两个文件都添加到同一个项目中,IDE会自动处理编译依赖,不用手动敲命令行编译~
内容的提问来源于stack exchange,提问作者Tirafesi
相关产品推荐
相关产品推荐

