規定クラスのメソッドを呼ぶ – プログラミング – Home

規定クラスのメソッドを呼ぶ
 
通知
すべてクリア

規定クラスのメソッドを呼ぶ


久方ぶり
 久方ぶり
(@久方ぶり)
ゲスト
結合: 18年前
投稿: 7
Topic starter  

class A
⇒class B
⇒⇒class C

こんな感じでクラスを継承している状態で
class Cからclass Aのメソッドを呼ぶことは可能でしょうか?

C++で書けばこんな感じです
/*virtual*/ void C::Func()
{
A::Func(); //★★★ ここ
}


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

…マニュアルを読みましょう。

// C#

public class Father {
public virtual void f() {
System.Console.WriteLine(Father.f);
}
}

public class Child : Father {
public override void f() {
base.f(); // ←ココ!
System.Console.WriteLine(Child.f);
}
}

public class Program {
public static void Main() {
Father fa = new Child();
fa.f();
}
}


返信引用
久方ぶり
 久方ぶり
(@久方ぶり)
ゲスト
結合: 18年前
投稿: 7
Topic starter  

επιστημηさん、ご回答ありがとうございます。

こちらの 質問が下手ですみません。
επιστημηさんの例で言えば

Childクラスをさらに派生させたChild2クラスを作って、
そこからChild::FではなくFather::FをCALLできるのでしょうか?
という質問でした。

こんな感じです。

public class Child2 : Child {
public override void f() {
base.f(); // ←★ココでChild::Fでは無く、Father::FをCALLしたい!!
System.Console.WriteLine(Child.f);
}
}
よろしくお願いします


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

あ、はいはい。親を飛び越して爺ちゃんのを呼びたい、と。
どーすんでしょねぇ...


返信引用
名無し
 名無し
(@名無し)
ゲスト
結合: 20年前
投稿: 15
 

直接、爺さんを呼び出せないのではないかな。

スパゲッティコードになりそうだし。
Childにf()が無ければ、Child2からFatherのf()をbase.f();で呼べるし。
個人的に必要性はまったく感じないけど。


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

そもそもFather.f()を隠蔽する目的で、
Child.f()が定義されているのだと思います。
だから、Child2からFather.f()を呼び出しては
いけないのだと思います。

どうしても呼び出したいのであれば、
Child2はChildでなく、Fatherを継承するのが手っ取り早いです。

あるいは、Child.f()を実装した人が、
Father.f()が隠されていることに
気付いていないのかもしれません。

いずれにせよクラスの設計が不味いと考えられます。
設計の見直しをする良いチャンスです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました