- PR -

C#、インスタンス生成時のオーバーライド方法

1
投稿者投稿内容
Mas
会議室デビュー日: 2002/07/29
投稿数: 2
投稿日時: 2002-07-29 11:39
インスタンスを生成するタイミングでメソッドをオーバーライドする方法がわかりません。
どなたかご教授いただけませんでしょうか。

以下のソースはJAVAのものですが、3行目でSonクラスのインスタンスを作成すると同時に、SonクラスのDo()メソッドをオーバーライドしています。
これと同じ操作をC#でそもそも可能なのか?可能ならばどのように行えばよいのか、調査してもわかりませんでした。

よろしくお願いいたします。

01: class Per{
02: public static void main(String Arg[]){
03: Son Son_ins= new Son(){
04: public void Do(){
05: System.out.println("こんにちわ 世界");
06: }
07: };
08: Son_ins.Do();
09: }
10: }
11:
12: class Son{
13: public void Do(){
14: System.out.println("Hello World");
15: }
16: }
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2002-08-02 18:59
引用:

Masさんの書き込み (2002-07-29 11:39) より:
インスタンスを生成するタイミングでメソッドをオーバーライドする方法がわかりません。
どなたかご教授いただけませんでしょうか。

以下のソースはJAVAのものですが、3行目でSonクラスのインスタンスを作成すると同時に、SonクラスのDo()メソッドをオーバーライドしています。
これと同じ操作をC#でそもそも可能なのか?可能ならばどのように行えばよいのか、調査してもわかりませんでした。


レスが付きませんね。
次のコードでは、駄目なんでしょうか?

コード:
class Per {
  class New_Son : Son {
    public override void Do() {
      System.Console.WriteLine("こんにちわ 世界");
    }
  }

  [STAThread]
  public static void Main(String[] Arg){
    Son Son_ins = new New_Son();
    Son_ins.Do();
    System.Console.Read();
  }
}

class Son {
  public virtual void Do() {
    System.Console.WriteLine("Hello World");
  }
}


「インスタンスを生成するタイミングでメソッドをオーバーライドする」という意味と、必要性を、少し違う形で表現して頂けないでしょうか?
そうすれば、もっと違う形でお役に立てると思うんですが…。
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2002-08-03 00:01
匿名クラスの機能がC#にあるか?というご質問でしたら、ありません、というのが回答になります。

Javaでの匿名クラスの主な使い道であるイベントリスナーの実装ということでしたら、C#ではdelegateを使います。

私も匿名クラスをイベント以外の場面で使う理由について興味があります。どんなふうに使われるのでしょう?
#とりあえずGenericsはナシってことで だってC#にはまだないから。。。
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2002-08-03 09:04
引用:

NothingBut.NETFXさんの書き込み (2002-08-03 00:01) より:
#とりあえずGenericsはナシってことで だってC#にはまだないから。。。


NothingBut.NETFXさん、質問なんですが、C#に「テンプレート」「Generics」は必要なんでしょうか?
(ここの主題とは少し離れますが、済みません。)

確かに「C++」「Java」では、データ全てが「Object」では無いので分かるんです。
でも「C#」では、データは全て「Object」ですよね。
それに、演算子のオーバーロードが可能な訳ですから、総称性のサポートはある程度出来ていると私は思っているですが…。

「C#にはまだないから。。。」と言う事は、「C#」もGenericsを採用するという話があるんでしょうか?
(「.NET Framework」読ませて貰ってます。
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2002-08-04 13:20
引用:

objectさんの書き込み (2002-08-03 09:04) より:
C#に「テンプレート」「Generics」は必要なんでしょうか?


私ごときが説明するよりも、おそらくMSRのプロジェクトのペーパーをご一読されるほうが早いと思います。プロジェクトの最新状況が2002年7月23日からのワークショップでも発表されています。
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2002-08-04 14:55
NothingBut.NETFXさん、「Generics for C#」を使わない場合の問題点が、良く分かり、大変勉強になりました。
情報、有難う御座いました。
(みなさん、主題から外れて、申し訳ありませんでした!)
Mas
会議室デビュー日: 2002/07/29
投稿数: 2
投稿日時: 2002-08-05 12:32
object様>
 やはりC#では、ソース内でネストクラスとして継承を行いなおし、そのタイミングでメソッドのオーバーライドを行わざるをえないという事ですね。
インスタンスを作成するタイミングでメソッドのオーバーライドをする利点というのは、新たにクラスを定義しなおす手間が省けるという点です。
Javaではネストクラスであろうがなんであろうが、新たなクラスの定義によってクラスファイルが生成されてしまうのでobject様に提供していただいた方法はナンセンスです。
しかし、C#ではインスタンスの作成のタイミングでオーバーライドできないようなのでObject様の方法を採るのがベストの様です。
 
Object様、NothingBut.NETFX様mありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)