C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: コンストラクタから別のコンストラクタを呼ぶ


(過去ログ 52 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■28635 / inTopicNo.1)  コンストラクタから別のコンストラクタを呼ぶ
  
□投稿者/ .SHO (221回)-(2008/11/28(Fri) 13:03:13)

分類:[C#] 

2008/11/28(Fri) 13:04:47 編集(投稿者)
public class C {
    public C( string s, int n ) {}
    public C( string s ) : this( s, 0 ) {}
}

のようにして他のコンストラクタを呼べるのはわかるのですが
最初に呼ばれるコンストラクタの中で string s を作ってから
他のコンストラクタを呼ぶことは可能ですか?

たとえば↓こんな感じなんですが。

public class C {
    public C( string s ) {}
    public C() {
        C( "AAA" ); // ココでコンパイルエラー
    }
}

引用返信 編集キー/
■28636 / inTopicNo.2)  Re[1]: コンストラクタから別のコンストラクタを呼ぶ
□投稿者/ こくぶん (1回)-(2008/11/28(Fri) 13:17:27)
No28635 (.SHO さん) に返信

こんな方法じゃダメですか?

public class C {
    public C(string s) {
        // some code
    }

    public C() : this(Foo()) { }

    static string Foo() {
        string s;
        // ここで s を生成
        return s;
    }
}

引用返信 編集キー/
■28637 / inTopicNo.3)  Re[1]: コンストラクタから別のコンストラクタを呼ぶ
□投稿者/ みきぬ (252回)-(2008/11/28(Fri) 13:19:29)
私ならこうするかしら。

public class C
{
    public C( string s )
    {
        ○○で初期化(s);
    }

    public C()
    {
        ○○で初期化("AAA");
    }

    private void ○○で初期化(string s)
    {
        // ...
    }
}

引用返信 編集キー/
■28639 / inTopicNo.4)  Re[2]: コンストラクタから別のコンストラクタを呼ぶ
□投稿者/ .SHO (222回)-(2008/11/28(Fri) 13:26:00)
2008/11/28(Fri) 13:26:43 編集(投稿者)
図表モード忘れで編集。

■No28636 (こくぶん さん) に返信

>     public C() : this(Foo()) { }
> 
>     static string Foo() {
>         string s;
>         // ここで s を生成
>         return s;
>     }
> }

なるほど!こんな書き方がありましたか。
ありがとうございます。
助かりました。

引用返信 編集キー/
■28640 / inTopicNo.5)  Re[2]: コンストラクタから別のコンストラクタを呼ぶ
□投稿者/ .SHO (223回)-(2008/11/28(Fri) 13:28:30)
No28637 (みきぬ さん) に返信

> 私ならこうするかしら。

そうですね。
言われてみれば外に出しちぇばいいんですね。
ありがとうございます!!

解決済み
引用返信 編集キー/
■28643 / inTopicNo.6)  Re[3]: コンストラクタから別のコンストラクタを呼ぶ
□投稿者/ .SHO (224回)-(2008/11/28(Fri) 13:37:51)
こくぶんさんの方法が、見た目がちょっとかっちょいい(笑)のでやってみたら
Foo() を static にしなければいけないのが、ちょっと嫌だったので^^;
素直にみきぬさんの方法で実装させて頂きました。
お二人ともありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -