问题标签 [member-hiding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# - 关键字使用 virtual+override 与 new
在基类型“”中声明一个方法,virtual
然后在子类型中使用“”关键字覆盖它,而不是在子类型中声明匹配方法时override
简单地使用“ ”关键字有什么区别?new
c# - C# 与成员一起隐藏
在下面的例子中,会发生什么?
我确定您会在控制台上看到“2”,但我正在阅读(和看到)的内容与此相反......
为什么你会看到“3”而不是“2”?我认为派生类的成员“隐藏”了基类的相同成员......
c# - C#从基类隐藏、覆盖和调用函数
我正在学习 C#,我遇到了以下问题。我有两个类:基类和派生类:
现在,没有virtual
和override
关键字。当我编译这个时,我得到了我试图MyMethod
从MyBase
课堂上隐藏的警告(这当然是预期的)。
我想要做的是从具有派生类实例的基类中调用该方法。我这样做:
当我没有virtual
在方法中指定任何 , etc. 关键字时,它可以正常工作。我尝试将关键字组合起来,得到以下结果:
我希望这张表对你来说很清楚。我有两个问题:
- 从基类()调用函数是否正确
((MyBase)myDerived).MyMethod();
?我知道base
关键字,但只能从派生类内部调用它。这样对吗? - 为什么在最后一种情况下(使用
virtual
和override
修饰符)调用的方法来自派生类?你能解释一下吗?
c# - 使用成员隐藏 (`new`) 获得更具体的返回类型
我正在考虑使用new
重新定义子类中的成员以提供更具体的返回类型。问题是:这是个好主意,还是自找麻烦?
要解决的问题是当有几个“镜像”类层次结构时,每个层次结构层的类型都引用另一个层次结构的同一级别。很难解释,所以举个例子:
有代码只处理抽象的“级别”1(A1
/B1
等),其他级别也一样。如果每个“级别”都能看到尽可能具体的类型,那就太好了。目前,我在最顶层定义了类型,并在调用代码中一直向下转换。有时我使用另一个名称为某个“级别”添加另一个成员,这会导致更多的冗余成员。我想让它更干净。
(泛型在这里不是一个选项,因为B2
不知道就不会有用B3
(那里需要额外的接口)。如果有很多类型(例如,还有 C1/2/3、D1/2/3 ...)会有太多通用参数。从技术上讲,它会起作用,但它会变得非常复杂。)
此外,我将序列化其中的一些类 ( DataContractSerializer
),并使用 NHibernate 将一些类映射到数据库。
有没有人已经做过这样的事情?值得推荐吗?有没有其他方法可以解决同类问题?
编辑:由于关于演员表和属性实现的讨论,我稍微更改了代码。这实际上不是这里的问题。我只是试着写尽可能少的代码来做一个简短的例子。
c# - WPF:如何使基类的依赖属性只读_
我有一堂课
public class NavigableViewport3D : Viewport3D
。该类应隐藏该Viewport3D.Camera
属性,使其变为只读。这是我到目前为止所拥有的:
但我也希望始终返回与/NavigableViewport3D.CameraProperty
相同的值...如果没有依赖属性,我会这样做:Viewport3D.CameraProperty
base.Camera
我真的希望有更好的方法来实现这一点......有什么建议吗?
java - eclipse警告“字段声明隐藏另一个字段或变量”的使用?
Eclipse 有一个名为“字段声明隐藏另一个字段或变量”的 java 编译器设置,可以设置为警告/错误。
在您看来,这个警告有多重要?
处理这个问题的好标准方法是什么?
发生这种情况的代码示例:
我见过重命名字段的解决方案,即“fCaption”,但这会导致可以生成的自动 getter/setter 具有奇怪的名称 ( getfCaption()
)。不是不可读,而是丑陋...
编辑:哦,是的,有可能重命名方法签名Test(String caption_)
或类似的东西,但这最终会使 javadoc 看起来很奇怪。
c++ - C++ 赋值运算符解析
考虑以下代码:
然后当我们调用这个成员时:
将打印:
问题:为什么 B::foo 隐藏了 A::foo,而 B::operator= 没有?
java - 关于在 Java 中隐藏/隐藏成员变量的问题
我想了解隐藏在 Java 中的工作原理。所以让我们假设你有以下代码
如果我编译,我将获得 NullPointerException。我认为这将是 sc.toString(); 的输出。
我将此代码更改为
它得到了预期的输出......好的 setMember of B 覆盖了来自 A 的那个,所以我可以用这种方式解释这一点。我玩了一下并从 B 中删除了 setMember 以取回我的 NullPointerException。但是如果我将 A 的代码更改为,它会再次编译并给我输出
在我看来,实际上 SomeClass 成员有两个实例......但是如果有两个实例,那么阴影意味着什么?隐藏仅对第二种情况有用吗?
java - 访问修饰符和隐藏 Java 字段
这是对以下问题的跟进:“java access modifiers and overriding”。然而,前者通常处理 Java 方法。为什么 Java 字段具有灵活性?我们可以在继承的类中通过尊重他们来缩小或扩大可见性,而不能使用“覆盖”或“隐藏”方法。
c# - C# 列表隐藏属性?
好吧,这让我发疯了。List<T>
实现IList<T>
。然而,
错误是:
“System.Collections.Generic.List”不包含“IsReadOnly”的定义,并且找不到接受“System.Collections.Generic.List”类型的第一个参数的扩展方法“IsReadOnly”(您是否缺少 using 指令还是汇编参考?)
怎么会这样?这不违反我们告诉所有人的关于不隐藏成员的规则吗?这里的实现细节是什么?