首页 / 知识
关于C#:隐藏继承的成员
2023-04-11 15:11:00

Hiding inherited members我正在寻找有效隐藏继承成员的方法。 我有一个类库,它们从通用基类继承。 一些较新的后代类继承了依赖属性,这些依赖属性已经过时,并且在使用IntelliSense或在可视设计器中使用这些类时可能会造成一些混乱。
这些类都是为WPF或Silverlight 2.0编写的所有控件。 我知道 它不仅是功能性问题,还包括可用性问题。 我该怎么办? 更新资料
我真正想要隐藏的某些属性来自我自己的祖先,并且由于我正在设计特定的工具,因此无法使用 像上面的迈克尔建议那样覆盖它们,并且为了防止人们使用覆盖的(sp?)方法,请将它们标记为过时的:
如果将第二个参数设置为true,则如果有人尝试调用该方法并且第一个参数中的字符串是消息,则会生成编译器错误。如果parm2为false,则仅生成编译器警告。 虽然您无法阻止使用这些继承的成员,但应该可以使用EditorBrowsableAttribute将它们从IntelliSense中隐藏:
编辑:刚刚在文档注释中看到了这一点,这使其在此目的上毫无用处:
您可以做的一件事是包含对象,而不是从另一个类扩展。这将使您在暴露要公开的内容方面具有最大的灵活性,但是如果您绝对需要该对象属于该类型,则不是理想的解决方案(但是您可以从吸气剂中公开该对象)。 从而:
成为:
要么:
我认为,最好的方法是将组合而不是继承作为考虑因素。 或者,您可以创建一个具有所需成员的接口,让派生类实现该接口,然后对该接口进行编程。 完全隐藏并标记为不使用,包括智能感应,我相信这是大多数读者期望的...
我知道对此有多个答案,而且现在已经很老了,但是最简单的方法就是将它们声明为 考虑我当前正在处理的一个示例,其中有一个API使第三方DLL中的每个方法都可用。我必须采用他们的方法,但是我想使用.Net属性,而不是" getThisValue"和" setThisValue"方法。因此,我构建了第二个类,继承了第一个类,创建了一个使用get和set方法的属性,然后将原始的get和set方法重写为私有。想要在其上构建其他功能的任何人仍然可以使用它们,但是如果他们只想使用我正在构建的引擎,那么他们将能够使用属性而不是方法。
使用double类方法摆脱了对无法使用
现在,valueEnum可用于两个类,但是在APIUsageClass类中仅可见该属性。对于想要扩展原始API或以其他方式使用它的人,仍然可以使用API??Class类,而对于想要更简单的东西的人,可以使用API??UsageClass。 最终,我要做的是将APIClass内部化,并且只公开继承的类。 我测试了所有建议的解决方案,它们并没有真正隐藏新成员。 但这确实是:
但是在代码隐藏中仍然可以访问,因此也要添加过时的属性
尽管上面已经明确指出,在C#中无法更改继承的方法和属性的访问修饰符,但我通过使用隐式强制转换的一种"伪继承"克服了这个问题。 例:
现在假设您要从
通过在末尾包含隐式强制转换,它使我们可以在需要时将
这种方法的最大缺陷是,您需要重写要"继承"的每个方法/属性。 注意:
虽然这允许更改 您可以使用界面
|
最新内容
相关内容
python可以继承父类方法吗
python可以继承父类方法吗,培训,代码,名字,方法,动物,属性,编译器,这样的话,定义,里面,python继承,调用父类属性方法在python里面,继承一个类python如何查看对象属性
python如何查看对象属性,培训,网络,系统,函数,对象,属性,变量,示例,实例,模块,在Python语言中,有些库在使用时,在网络上找到的文档不全,这就需要python继承的原理分析
python继承的原理分析,分析,合法,培训,原理,属性,顺序,经典,广度,线性,实例,python继承的原理分析原理分析1、子类会先于父类被检查。多个父python基类是什么意思
python基类是什么意思,培训,属性,之间,知识点,所学,父子,静态,语法,实例,练习,python基类是什么意思1、说明继承就是让类和类之间产生父子关关于c#:通用类型检查
关于c#:通用类型检查,关于c#:通用类型检查,类型,布尔,泛型类型参数,方法,Generic type checking有没有一种方法可以强制/限制传递给基元关于c#:通用类型转换FROM字符串
关于c#:通用类型转换FROM字符串,关于c#:通用类型转换FROM字符串,属性,类型,的是,想用,Generic type conversion FROM string我有一个类,我关于asp.net:如何定义带有潜在子元
关于asp.net:如何定义带有潜在子元素和属性的自定义web.config部分?,关于asp.net:如何定义带有潜在子元素和属性的自定义web.config部HTML5新元素属性最新详解
HTML5新元素属性最新详解,HTML5,新元素,新,元素,属性,最新,详解,canvas,, canvas 新元素 canvas标签定义图形,比如图表和其他Knockout.Js中的Observables监控属
Knockout.Js中的Observables监控属性,Knockout.Js,中的,Observables,监控,属性,Knockout.Js,,Knockout.Js中的Observables监控属性K给已有的函数对象增加属性或者方法
给已有的函数对象增加属性或者方法,给,已,有的,函数,对象,增加,属性,或者,方法,,给已有的函数对象增加属性或者方法格式:构造函数名.js-prototype 继承实例分享
js-prototype 继承实例分享,js-prototype,继承,实例,分享,prototype,继承,所,,prototype 继承所有的 JavaScript 对象都会从一个 prVue3-计算属性关键词
Vue3-计算属性关键词,Vue3-,计算,属性,关键词,Vue3,计算,属性,关键词,,Vue3 计算属性计算属性关键词: computed。计算属性在处理一