不使用c#名称空间会发生什么
Hi将在c#中编写一个dll,不带命名空间 我将编写一个类,然后将其转换为dll,即c#默认库类型为不使用c#名称空间会发生什么,c#,namespaces,C#,Namespaces,Hi将在c#中编写一个dll,不带命名空间 我将编写一个类,然后将其转换为dll,即c#默认库类型为 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace temp { public class c1 { public static string f1(string
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace temp
{
public class c1
{
public static string f1(string deger) {
return deger.ToUpper() + " 333 ";
}
}
}
现在,我将编写以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class c1
{
public static string f1(string deger) {
return deger.ToUpper() + " 333 ";
}
}
如果两个U代码在运行时相同,则该类将位于.NET未命名全局命名空间中(不在程序集根命名空间中)。通过将此代码转换为dll,可以从任何地方以“global::c1”或“c1”的形式访问它。我想您的意思是编译为库。名称空间(或缺少)在这方面没有特殊效果 如果要在不引用dll的情况下引用此类,则需要动态加载dll 例如:
Assembly a = Assembly.LoadFrom("mylibrary.dll");
你的下一个问题是反思和使用这个类。通常,您会有一个定义一些接口的库
InterfaceLibrary.dll包含接口IC1
PluginLibrary.dll包含实现IC1的类C1
Program.exe
程序和插件库都引用接口库。该程序可以动态加载PluginLibrary并查找实现IC1
的类
下面是一个更深入的C#插件架构示例:我建议您阅读…@Sayse,但您可能会对这里90%的问题这么说!@weston可能重复-我经常这样做,在这种情况下,对于堆栈溢出格式,答案太宽,因此linkI更新了我的代码并在namspace中的类名左侧添加了公共语句(我在询问时忘记了公共语句),这两个U代码是相同的,但第一个代码有namspace{…},区别在于:这个类将位于.NET未命名全局命名空间(不在程序集根命名空间中)。真的吗?好的。我没有使用命名空间别名,并且我将此代码转换为dll,当我没有引用此dll时,我可以从其他项目访问这个类。所以我想我只能从我的dll中访问这个类,而ı将在我的dll中使用它,不是吗?对不起,我的种姓是(…当不引用这个dll时,我可以从其他项目访问这个类吗):如果这个类添加了.net的库或其他地方。我认为这个类只添加了我的dll。没有其他在机器上运行的应用程序不能访问这个类,不是吗?没有,没有其他应用程序可以访问这个类。全局名称空间不是全局的。谢谢,最后一个问题,所以如果我在项目中使用此dll,或者在其他可以访问此类的地方使用此dll(使用dll是访问此类的唯一方法),如果我不使用此dll,我决不能访问此类,不是吗?如果按照我在回答中解释的方式动态加载程序集,则可以使用该类。这意味着,如果我要访问该类,则必须使用该dll