草庐IT

dll-interface

全部标签

c# - 在 C# 中确定引用的 dll 文件版本

我有一个C#解决方案,它引用了我从另一个C#解决方案创建的dll。使用Application.ProductVersion可以很容易地确定我的解决方案的产品版本。但是,我真正需要的是一种在我的程序中分别确定exe和dll文件版本的方法。我想在我的关于对话框中显示dll和exe的文件版本。执行此操作的代码是什么样的? 最佳答案 最简单的方法是,如果您知道引用程序集中的类型:AssemblyNamename=typeof(MyCompany.MyLibrary.SomeType).Assembly.GetName();Assembly.

c# - 为什么现在类倾向于定义为接口(interface)?

最近2-3年,我看到的许多项目,例如Cuyahoga开源C#CMS,都倾向于将持久类和非持久类定义为Interface。为什么?有充分的理由吗?测试驱动开发?mock?设计模式?... 最佳答案 主要原因是这使得像dependencyinjection这样的技术成为可能。更轻松。这反过来又允许软件具有更大的灵active,并且更容易重用和重组现有代码。有用的示例包括各种形式的单元测试(如您所提到的),以及大多数其他形式的“常规”代码重用。一个简单的例子:假设您有一种计算员工薪水的方法。作为其签名的一部分,它接受一个计算他们yield

c# - 确定 IDisposable 是否应该扩展接口(interface)或在实现所述接口(interface)的类上实现

我如何确定是应该使用IDisposable扩展我的接口(interface)之一还是在实现我的接口(interface)的类上实现IDisposable?我有一个不需要处理任何外部资源的接口(interface),除了一个特定的实现。我的选择似乎是:1)在要求所有实现都实现Dispose的接口(interface)上实现IDisposable,即使只是一个空方法。-或-2)仅在具有需要处理的资源的类上实现IDisposable。这将导致“使用”问题,因为我的对象是从工厂创建的,因此所有上游代码都针对接口(interface)工作。由于该接口(interface)未绑定(bind)IDi

c# - 为什么一个接口(interface)会实现另一个接口(interface)?

我正在查看List的声明并看到它实现了IList,ICollection和IEnumerable(除其他外)。然后我去看IList的定义并看到它实现了ICollection和IEnumerable.如果一个接口(interface)实现另一个接口(interface)就像“契约(Contract)”一样工作,而我们没有为它们编写真正的代码,那有什么意义呢?这个实现是累积的吗?如果是,因为IList工具ICollection和IEnumerable,List不应该只实现IList?抱歉,如果我的问题令人困惑,我现在有点困惑。 最佳答案

c# - 什么时候使用 C# 类库 (.dll) 合适?

我是一名从未真正使用过.dll文件的程序员。当然,当我需要第3方软件时,例如图形库、帮助我创建图形的库等。我会将引用/ddl文件添加到我的程序中并在我的代码中使用它们。此外,您似乎可以将.dll用于很多不同的事情,所以我希望这个主题集中在C#上。现在我正在开发一个清理库(?)(我认为这是正确的术语),它将充满相关的方法,可以以各种不同的方式清理变量。我想知道的是:有什么好处:1)将方法写入类库->编译/构建它->添加库作为对程序的引用-这需要清理一些变量?或者如果我在哪里,它会完全一样吗:2)在程序中新建一个SanitizeClass->添加所有sanitize方法->在程序中需要清理

c# - 为什么可以比较不相关的c#接口(interface)引用而不会出现编译错误?

最近我很惊讶地发现编译器在比较接口(interface)引用方面显然并不严格,我想知道为什么它会这样工作。考虑这段代码:classProgram{interfaceI1{}interfaceI2{}classC1:I1{}classC2:I2{}staticvoidMain(string[]args){C1c1=newC1();C2c2=newC2();I1i1=c1;I2i2=c2;boolx=c1==c2;booly=i1==i2;}}编译器说我无法比较c1==c2,如下所示。类型完全不相关。然而,它确实允许我比较i1==i2。我预计它会因编译时失败而出错,但我惊讶地发现您可以将任

c# - 如何使用 PowerShell 使用 C# DLL 中存在的类的新对象

我有一个C#类,例如publicclassMyComputer:PSObject{publicstringUserName{get{returnuserName;}set{userName=value;}}privatestringuserName;publicstringDeviceName{get{returndeviceName;}set{deviceName=value;}}publicstringdeviceName;}派生自PSObject。我正在使用导入模块在powershell中加载具有此代码的DLL。然后我尝试在PowerShell中创建MyComputer类的新对象

c# - 三元运算符语法来选择接口(interface)的实现

这个问题在这里已经有了答案:Implicitconversionissueinaternarycondition[duplicate](4个答案)关闭8年前。我想知道为什么这行代码不能编译:ILogStuffLogger=(_logMode)?newLogToDisc():newLogToConsole();注意LogToDisc和LogToConsole都实现了ILogStuff,_logMode是一个bool变量。我收到的错误消息是:Error3:Typeofconditionalexpressioncannotbedeterminedbecausethereisnoimplici

c# - 获取在 .NET Core 中实现接口(interface)的所有类型

使用反射,如何获取在.NETCore中实现某些特定接口(interface)的所有类型?我注意到.NET4.6中可用的方法不再可用。例如,这段代码不起作用。vartype=typeof(IMyInterface);vartypes=AppDomain.CurrentDomain.GetAssemblies().SelectMany(s=>s.GetTypes()).Where(p=>type.IsAssignableFrom(p));它抛出Thename'AppDomain'doesnotexistinthecurrentcontext错误。 最佳答案

c# - C#中如何通过接口(interface)实现事件?

我有一个问题:假设我有一个基于插件的系统。我需要某种接口(interface),通过它我可以从每个插件捕获事件,该插件实现了例如IReporting接口(interface)。(IReporting)object.OnSomeEvent+=但是我找不到办法做到这一点。 最佳答案 你应该写((IReporting)obj).XXX而不是(IReporting)obj.XXXpublicinterfaceIFoo{eventEventHandlerBoo;}classFoo:IFoo{publiceventEventHandlerBoo