クラスAが基本クラスであり、AのクラスBサブクラス(クラスB:A)があるとします。次に、クラスC:Bがあります。
質問は、クラスAにメソッドがある場合、クラスCはそのメソッドを使用できますか?
クラスAが基本クラスであり、AのクラスBサブクラス(クラスB:A)があるとします。次に、クラスC:Bがあります。
質問は、クラスAにメソッドがある場合、クラスCはそのメソッドを使用できますか?
はい、宣言されている場合は可能public
ですprotected
。しかし、そうではありませんprivate
。
@DavidLに感謝します。.の特殊なケースについて言及するのを忘れましたinternal
。
Visual Studioに付属のC#マニュアル(2012年版はこちら)から::
また、これは、C#5.0の新しい非表示機能です。
ネストされたタイプは、ベースメンバーを非表示にすることができます(§3.7.1)。新しい修飾子は、非表示を明示的に表現できるように、ネストされた型宣言で許可されます。例
using System;
class Base
{
public static void M() {
Console.WriteLine("Base.M");
}
}
class Derived: Base
{
new public class M
{
public static void F() {
Console.WriteLine("Derived.M.F");
}
}
}
class Test
{
static void Main() {
Derived.M.F();
}
}
は、Baseで定義されたメソッドMを非表示にするネストされたクラスMを示しています。
場合によります。
はい、クラスから継承すると、他のクラスから継承したすべてのメソッドを含む、そのすべてのメソッドを取得します。
public class A
{
public int Id { get; set; }
protected int protectedId { get; set; }
private int privateId;
}
public class B : A
{
}
public class C : B
{
public C()
{
int temp = Id; // works
int temp1 = protectedId; // works
int temp2 = privateId; // does NOT work
}
}
and in some other class;
public void SomeMethod()
{
C c = new C();
int i = c.Id; // works
int j = c.protectedId; // does NOT work
int k = c.privateId; // does NOT work
}