首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从程序集继承类而不强制用户引用两个程序集

要从程序集继承类而不强制用户引用两个程序集,可以使用以下方法:

  1. 使用接口:将需要继承的类转换为接口,然后在需要继承的程序集中实现该接口。这样,用户只需引用包含接口的程序集,而不需要引用包含实现的程序集。
  2. 使用适配器模式:将需要继承的类转换为接口,然后创建一个适配器类,该类实现了接口并继承了需要继承的类。这样,用户只需引用包含适配器类的程序集,而不需要引用包含需要继承的类的程序集。
  3. 使用代理模式:将需要继承的类转换为接口,然后创建一个代理类,该类实现了接口并委托给需要继承的类。这样,用户只需引用包含代理类的程序集,而不需要引用包含需要继承的类的程序集。
  4. 使用依赖注入:将需要继承的类转换为接口,然后使用依赖注入将实现类注入到需要使用的类中。这样,用户只需引用包含接口和需要使用的类的程序集,而不需要引用包含实现类的程序集。

总之,要从程序集继承类而不强制用户引用两个程序集,可以使用上述方法之一来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C# 如何写出一个不能被其他程序继承的抽象

我需要限定某个抽象只能在我程序实现,不支持其他程序实现,也就是我需要一个不能被继承的抽象 在 C# 里面有抽象和接口,这两个都是期望被继承才能被使用,抽象是可以做到只能在自己程序程序可见的其他程序实现...,而在其他的程序是不能实现 在开始告诉大家如何写之前,需要说明在什么时候需要使用这个方法 有一些接口或方法等需要传入一个抽象的,但这个抽象里面有很多方法或属性的定义是和程序内逻辑相关的,也就是开发者如果直接在外面继承这个抽象实现出来的一定是不符合预期的...此时就需要用到本文的方法 此时就不能使用接口,因为接口是无法限制只能在程序内实现,也就是在程序外依然可以用户自己定义 写出一个只能在程序继承的抽象的方法是在抽象里面放一个需要被重写的部件,这个部件的访问优先级为程序内...,例如下面的代码,在抽象 A 里面添加了需要继承重写的 B 方法, B 需要用到程序内才能访问的接口 // 程序 1 public abstract class A {...2 重写,例如下面代码将会提示重写方法 B 的接口没有权限,不重写方法 B 就不能继承 A 于是开发者就不能自己实现继承,这样的写法可以让 SDK 开发了多态,但又不让开发者传入不对的值 // 程序

42120

设计规则

CA1003:使用泛型事件处理程序实例 某个类型包含的委托返回 void,该委托的签名包含两个参数(第一个参数是对象,第二个参数是可以分配给 EventArgs 的类型),而且包含程序针对的是 .NET...但是,如果存在两个以上的类型参数,则大多数用户都会感到过于困难。 CA1008:枚举应具有零值 像其他值类型一样,未初始化枚举的默认值为零。...CA1017:用 ComVisibleAttribute 标记程序 ComVisibleAttribute 决定 COM 客户端如何访问托管代码。 合理的设计指出程序将显式指示 COM 可见性。...为一般用户进行设计的库架构师不应指望用户能熟练运用 out 或 ref 参数。 CA1046:不要对引用类型重载相等运算符 对于引用类型,相等运算符的默认实现几乎始终是正确的。...默认情况下,仅当两个引用指向同一对象时,它们才相等。 CA1047:不要在密封类型中声明受保护的成员 类型声明受保护的成员,使继承类型可以访问或重写该成员。

2K20
  • 100 个常见的 PHP 面试题

    > 9) 如何直接将输出显示给浏览器? 将输出直接显示给浏览器,我们必须使用特殊标记。 11) PHP是否支持多重继承? PHP只支持单继承。...PHP的使用关键字extends继承另一个 12) 使用final修饰的和方法代表什么意思? final是在PHP5版本引入的,它修饰的不允许被继承,它修饰的方法不允许被重写。...13) PHP中如何比较两个对象? 在PHP中,我们可以使用运算符==来比较两个对象是否为同一个的实例,并且拥有相同的属性和属性值。...还可以是使用运算符===来比较两个对象是否引用了同一的同一实例。 14) PHP和HTML是如何交互的? 可以通过PHP脚本生成HTML,还可以将信息HTML传递到PHP。...您还可以将客户端配置为与特定实例进行对话。因此,您可以在同一主机上运行两个不同的Memcache进程,但它们是完全独立的。

    21K50

    程序员级别鉴定书(.NET面试问答集锦)

    包括两个命名空间的元素。 什么是元素和属性之间的根本区别? 格式完好的XML和有效的XML之间的区别是什么? 使用.NET你会如何验证XML? 为什么这句代码通常是不好的?什么时候好?...接口不能进行运算符的重载,可以进行运算符重载。 接口的成员没有任何修饰符,其成员总是公共的,的成员则可以有修饰符。派生于接口的必须实现接口中所有成员的执行方式,派生的则不然。...引用类型 XmlSerializer所使用的“PropertySpecified”模式的意义是什么?它试图要解决什么问题? 把参与序列化的对象标注出来,只序列化有用的数据,不是序列化整个对象。...例如,此方法可被任何继承它的重写。 sealed:当对一个应用 sealed 修饰符时,此修饰符会阻止其他该类继承。...主互操作程序(PIA)指的是官方发布的互操作程序,如果电脑中安装了PIA,当你添加对库的引用时,那么Visual Studio会自动加载PIA,微软为Office应用程序提供了PIA,如EXcel

    1.8K70

    原 Introduction to the

    那么就没有办法使用现有的标准来描述一个利用垃圾回收的接口 (例如, 来回传递字符串, 担心谁负责删除它们)。...-在程序的生命周期里, 一个 clr.exe 文件可以引用另一个 clr.exe, 也定义了在运行时如何查找被引用文件的规则。...通过在用户代码中使用这些指令不是底层(且不安全的)内存读写 指令,还可以规避其他不安全 [CIL][cil-spec] 的操作(如那些允许跳转到任意且可能是非法的地址),这些都是构建一个内存安全系统所必须的...(in a mechanical sense) 继承是相当简单的,基本概念就是 继承类型的字段是基类型字段的超,派生字段包含基字段,任意代码中,一个指向基实例的指针都能都能通过一个派生示例的指针转换得到...特别是, 程序员通常不把整数看作对象。 如果在两个不同的位置分配了 "1", 程序员通常会认为这两个“1”是相等的, 当然希望对其中一个更新影响其他的实例。

    80090

    c#面试题抽象和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想

    12、在C#中如何实现多态?   13、什么是反射?如何实现反射?   14、请解释流与文件有什么不同?   15、程序与命名空间有什么不同?   16、请编写一个捕获所有异常的异常处理代码?   ...(2)new修饰符用于隐藏基成员的继承成员。   使用修饰符来修改方法、属性、索引器或事件。重写方法提供继承的成员的新实现。由重写声明重写的方法称为重写基方法。...(2)通过包括使用修饰符的属性声明,可在派生中重写虚拟继承属性。   3、请解释接口的显示实现有什么意义?   接口是其他类型为确保它们支持某些操作实现的引用类型。...在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化。无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数。   ...重写主要是在继承中体现,就是在基中定义方法并在派生中使用新实现重写它们。   13、什么是反射?如何实现反射?   反射提供了访问程序、模块和类型信息的一种机制。

    1.9K20

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    如何在编译时加载两个相同的程序 如何同时调用两个两个相同命名空间和类型的程序?...其ResolutionScope指向位于0x23000001得之,该类型存在于mscorlib程序。...比如: A程序引用了 C盘:\Newtonsoft.Json 6.0程序 B程序引用Nuget下载下来的Newtonsoft.Json 10.0程序 此时A引用B,就会报:发现同一依赖程序的不同版本间存在无法解决的冲突...第二种:对每个版本指定codeBase路径,然后分别放上不同版本的程序,这样就可以加载两个相同的程序如何同时调用两个两个相同命名空间和类型的程序?...那么这其中就引入了两个概念: WeakReference弱引用、WeakEventManager弱事件 对于这2两个区分语言的共同概念,大家可自行扩展百度,此处就不再举例。

    2.7K63

    .Net知识大全(个人整理)

    答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对像s。 38.abstract class和interface有什么区别? 答: 抽象: 只能用做其它的基,它就是被设计来被继承的。...任何派生自抽象必须使用override关键字实现该类所有的抽象成员,除非派生自己也是抽象。 接口: 接口是表示一组函数成员不实现成员的引用类型。其它和结构可以实现接口。...Datareader承担保存数据的责任,它只负责数据源读取数据到本地而已,它不是数据结构,而是网络通讯组件的高层封装。...用户对象: DataSet 它表示一组相关表,在应用程序中这些表作为一个单元来引用。 80.什么是code-Behind技术。...HTML是被设计用来显示数据的,重点是:显示数据以及如何显示数据更好上面。

    1.2K20

    2-类型基础

    一般自定义类型中要重写该方法,返回有意义的字符串; GetType: 返回一个类型为继承自Type的对象实例,返回的Type对象和反射一起来获得元数据信息,本方法是一个非虚方法,防止一个通过重写隐瞒真实类型...两个受保护方法: MemberwiseClone:非虚方法,它创建一个新的类型实例【浅拷贝(共享引用成员)】; Finalize:虚方法,执行垃圾回收之前会调用该方法; 引用类型new的过程: 托管堆中分配指定类型所需数量的字节来作为其存储对象的内存空间...2.类型转换 强制类型转换,需要程序员自己负责,如果转换不成功抛出Sysem.InvalidCastException【无效的转换】异常; 隐式类型转换,C#不需要特殊的语法就可以将对象转换为其任何一个基类型...; is,is检查制定对象是否兼容与指定的类型,返回bool; as类型转换,成功返回对象引用,失败返回null; 3.命名空间和程序 首先CLR没有命名空间的概念,也就是CLR根本就不认识命名空间。...CLR用的是类型的完全限定名,一个程序集中可以存在多个命名空间,一个命名空间下也可以包含多个程序

    58270

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    再比如,C#语言中,对名是区分大小写的,我在C#中定义了两个,一个叫BaseBusiness,另一个叫baseBusiness。我在vb中去继承这个BaseBusiness。...如图,在vb中访问这个会报错的,报:"BaseBusiness"不明确,这是因为在vb中对名是区分大小写的。在vb中,它认为它同时访问了两个一模一样的,所以按照vb的规则这是不合理的。...其ResolutionScope指向位于0x23000001得之,该类型存在于mscorlib程序。...比如: A程序引用了 C盘:\Newtonsoft.Json 6.0程序 B程序引用Nuget下载下来的Newtonsoft.Json 10.0程序...那么这其中就引入了两个概念: WeakReference弱引用、WeakEventManager弱事件 对于这2两个区分语言的共同概念,大家可自行扩展百度,此处就不再举例

    4.5K30

    .NET 面试题汇总(带答案)

    这种管理包括将每个程序加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。程序包含模块,模块包含类型,类型又包含成员。反射则提供了封装程序、模块和类型的对象。...protected 访问仅限于包含包含派生的类型。   internal 访问仅限于当前程序。   protected internal 访问仅限于包含派生的当前程序或类型。   ...这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用不复制对象本身。   所有的值类型均隐式派生自 System.ValueType。与引用类型不同,值类型不可能派生出新的类型。...25.C#中的接口和有什么异同? 答:异:接口不能直接实例化。     接口包含方法的实现。     接口、和结构可从多个接口继承。但是C#只支持单继承只能从一个基继承实现。...答:面向对象的编程使用了派生继承以及虚函数机制.一个本来指向基的对象指针可以指向其派生的.并访问继承而来的成员变量和函数.虚函数是专门为这个特性设计的,这个函数在每个基的派生中都是同一个名字

    1.2K30

    《Java编程思想》总结

    解释是源程序翻译一句就执行一句的过程,编译是把源程序翻译成可执行的目标代码,再由用户决定何时执行。 C语言是比较传统的高级语言。C语言程序经过编译转换为汇编码,再经过汇编转换为机器码。...控制对成员的访问权限有两个原因: 第一个原因是为了使用户不要碰触那些他们不该碰触的部分,用户实际上只应该使用为他们提供的接口。...这是一种处理继承的理想方式,称为替代原则。 那么如何在组合与继承之间进行选择?...内部类使得多重继承的解决方案变得完整。接口解决了部分问题,内部类有效地实现了多重继承。也就是说,内部类允许继承多个非接口类型(或抽象)。...《Java编程思想》中提到:被检查的异常强制你在可能还没准备好处理错误的时候被迫加上catch子句,会导致“吞食则有害”的问题:catch处理,异常将会丢失。

    89310

    .NET面试题「建议收藏」

    程序员自行分配和释放内存空间 17.什么是强命名程序? 答:程序需要经过加密签名,强命名程序可以部署到全局程序缓存中,成为公共程序 18.net中读写数据库需要用到那些?他们的作用?...多继承性可通过实现这样的接口获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现不能从接口定义中继承行为。...多继承性可通过实现这样的接口获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现不能从接口定义中继承行为。...结构, ,接口 引用类型,结构是值类型。 结构不支持继承。 结构不能声明默认的构造函数。 结构可以不使用new关键字, 如果不使用new关键字,则无法直接使用。...当然,这也得需求出发,假如我们在传值的时候希望传递的是对象的引用地址不是对象的拷贝,就应该使用了。

    1K20

    JVM笔记-HotSpot的算法细节实现

    一旦加载动作完成,HotSpot 就会把对象内什么偏移量上是什么类型的数据计算出来(在即时编译过程中,也会在「特定的位置」记录下栈和寄存器中哪些位置是引用),这样收集器在扫描时就能直接得知这些信息,不必挨个方法区等...用户程序执行时,并非在代码指令流的任意位置都能停下来开始垃圾收集,而是强制要求必须执行到安全点后才能暂停。...但是,无法解决程序执行”的情况(比如用户线程处于 Sleep 或者 Blocked 状态),由于此时线程无法响应虚拟机的中断请求,无法再走到安全点挂起自己。 3....4.2 记忆 「记忆」是一种抽象的数据结构,用于记录「非收集区域」指向「收集区域」的指针集合。...理论证明,当且仅当以下两个条件同时满足时,才会产生“对象消失”的问题: 赋值器插入了一条或多条黑色对象到白色对象的新引用; 赋值器删除了全部从灰色对象到该白色对象的直接或间接引用

    1K10

    编写代码良好习惯——C#

    六、值和引用类型的区别   1、值类型不支持多态,适合存储应用程序操作的数据,引用则支持多态,适用于定义应用程序的行为;   2、对于数组定义为值类型可以显著提高程序的性能;   3、值类型具有较少的堆内存碎片...十九、定义并实现接口优于继承类型   1、不相关的类型可以共同实现一个共同的接口,而且实现接口比继承更容易;   2、接口比较稳定,他将一组功能封装在一个接口中,作为其他类型的实现合同,则可以随着时间的推移进行扩展...三十二、尽可能实现小尺寸、高内聚的程序   1、将所有的公有以及共用的基放到一些程序集中,把为公有提供功能的工具也放入同样的程序集中,把相关的公有接口打包到他们自己的程序集中,最后处理遍布应用程序中水平位置的...;   2、原则上创建两种组件:一种为小聚合、具有某项特定功能的程序,另一种为大宽、包含共用功能的程序。   ...四十二、利用特性简化反射   通过设计和实现特性强制开发人员用他们来声明可被动态使用的类型、方法和属性,可以减少应用程序的运行时错误,提高软件的用户满意度。

    72531

    代码质量规则

    CA1003:使用泛型事件处理程序实例 某个类型包含的委托返回 void,该委托的签名包含两个参数(第一个参数是对象,第二个参数是可以分配给 EventArgs 的类型),而且包含程序针对的是 Microsoft...但是,如果存在两个以上的类型参数,则大多数用户都会感到过于困难。 CA1008:枚举应具有零值 像其他值类型一样,未初始化枚举的默认值为零。...CA1017:用 ComVisibleAttribute 标记程序 ComVisibleAttribute 决定 COM 客户端如何访问托管代码。 合理的设计指出程序将显式指示 COM 可见性。...默认情况下,仅当两个引用指向同一对象时,它们才相等。 CA1047:不要在密封类型中声明受保护的成员 类型声明受保护的成员,使继承类型可以访问或重写该成员。...CA2215:Dispose 方法应调用基释放 如果类型继承自可释放类型,则必须它自己的 Dispose 方法中调用基类型的 Dispose 方法。

    2.1K30

    .Net软件工程师必备面试题134道

    程序员自行分配和释放内存空间 17.什么是强命名程序? 答:程序需要经过加密签名,强命名程序可以部署到全局程序缓存中,成为公共程序 18.net中读写数据库需要用到那些?他们的作用?...多继承性可通过实现这样的接口获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现不能从接口定义中继承行为。...答:1:ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,2:不使用com3:不在支持动态游标和服务器端游 4:,可以断开connection保留当前数据可用 5:强类型转换...多继承性可通过实现这样的接口获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现不能从接口定义中继承行为。...引用可以转换到接口类型或接口类型转换,instanceof 运算符可以用来决定某对象的是否实现了接口。

    65830

    .Net Remoting(分离服务程序实现) - Part.3

    注意这里如果仔细容易看错,因为Server和Share都是S开头,仔细看两个单词容易搞混。...使用“空”分离服务程序 使用空分离服务程序还是利用了 客户端只需要类型信息创建代理,不需要实际的实现代码 这个特性。...3.客户端取消对ServerAssembly项目的引用,将第1步生成的包含DemoClass“空”的ServerAssembly.dll程序复制到Bin目录中,然后添加对它的引用。...此时客户端的解决方案窗口如下图所示,它不引用其他任何项目,只引用第1步生成的“空”ServerAssembly程序: ?...客户端引用此生成的文件,就如同引用服务程序一样(你可以将这个文件视为上一小节的“空程序)。因为这个程序包含服务对象的实现代码,于是也就达到了向客户端隐藏服务程序实现的目的。

    46610

    】 看一看二者的有多像?

    2.访问修饰符 上一节,Java的包与C#的命名空间类似,但针对访问修饰符,包又与C#的程序类似。 C# Java 含义 public public 相同,访问不受限制。...protected C#,访问限于包含或派生自包含的类型。 private private 访问限于包含。 internal或添加修饰符 添加修饰符 同一(包/程序)可访问。...protected internal protected 相同,访问限于当前(包/程序)或派生自包含的类型。...private protected 访问限于包含或当前程序集中派生自包含的类型。 自 C# 7.2 之后可用。...4.继承,sealed与final 4.1 继承一个或实现接口: C#用“:" 符号。 Java继承用extends关键字,实现接口用implements关键字。

    55110

    【旧文重发 | 06】IC基础知识

    因此,程序员也可以将运算符与用户定义的类型一起使用。C++支持此功能,SystemVerilog不支持此功能。...当一个另一个派生时,该关系为“ is-a”,并且此属性称为继承。 下图说明了这一点。基汽车中派生出福特,则该关系为“is-a”,这意味着福特为汽车。...如果任何对象都引用了其他对象,则还将复制属于该对象的所有值的副本,不仅仅是内存地址或句柄。因此,称为深拷贝。 例如,对比如下两个。...[113] 什么是多重继承? 多重继承是某些面向对象的计算机编程语言的功能,其中对象或可以多个父对象或父继承特征和功能。它不同于单一继承,在单一继承中,一个对象或只能从一个特定的对象或继承。...应用 类型强制转换也可以应用于两个"兼容"的数据类型。 仅当两个数据类型"兼容"时,才能实现类型转换。 算子 要将数据类型强制转换到另一个数据类型,需要强制转换运算符"()"。 无需操作符。

    1.1K20
    领券