質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

3226閲覧

ジェネリック使うタイミング 具体的

ranran

総合スコア85

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

1クリップ

投稿2015/03/05 00:10

お世話になります。

ジェネリックを積極的に使い保守性の高いコードを記述したいと思うのですが、
具体的な使うタイミングが思いつきません。

このようなときに使えばよい、このようにすればきれいにまとめられる等
ご意見ください。

クラス、メソッドに対するジェネリックの使うタイミングを教えていただけたらと思います。

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

私の場合は継承と組み合わせて使うケースが多いです。
具体的な例の方が分かりやすいと思い、サンプルコードを書いてみました。

こうしておくとファイル保存処理などを共通化できるので、保守性が高くなるかと思います。
さらに発展させると、型Tのプロパティを取得・列挙して、型に応じたCSV自動生成なども可能です。

ただ、エンティティを配列やDataTableなどで扱っているとこのパターンは適用できないですね…

何かのアイデアになれば幸いです。

lang

1'CSV変換ユーティリティクラス 2Public MustInherit Class CsvBuilderBase(Of T) 3 'CSVの保存 4 Public Sub Save(items As IEnumerable(Of T), filePath As String) 5 '文字列の作成 6 Dim sb As New Text.StringBuilder 7 '件数分ループ 8 For Each i In items 9 '1行の書き込み 10 sb.AppendLine(Me.GetCsvString(i)) 11 Next 12 13 '保存処理 14 ---(省略)--- 15 End Sub 16 17 'CSV1行の文字列を作成 18 MustOverride Function GetCsvLine(item As T) As String 19End Class

lang

1'Class1をCSV変換するクラス 2Public Class Class1CsvBuilder 3 Inherits CsvBuilderBase(Of Class1) 'CSVBuilderBaseを継承 4 5 Public Overrides Function GetCsvLine(item As Class1) As String 6 'CSV1行の文字列を作成 7 Return String.Format("""{0}"",""{1}""", item.Code, item.Name) 8 End Function

投稿2015/03/06 04:34

mocha

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ranran

2015/03/06 16:06

なるほど! このように記述するのですね ジェネリックの便利さが伝わるコードでした どうせコーディングするのなら、綺麗にシンプルに分かりやすく書きたいです mochaさんのコードを参考に意識していきたいと思います 答えにくいだろう質問にもかかわらず回答いただきありがとうございました! 大変参考になりました♪
guest

0

MSDNの Visual Basic におけるジェネリック型 にも概略説明があります。ジェネリックに記述された1つのコードから、データ型毎の実体がコンパイラによって自動生成されるため、重複コードが減って保守性向上につながります。

ジェネリック型はさまざまなデータ型に対して同じ機能を実行するために必要な処理を行う、1 つのプログラミング要素です。 ジェネリック クラスまたはジェネリック プロシージャを定義すると、同じ機能を実行させる各データ型に対して、その機能を別々に定義する必要がありません。

通常のメソッド(プロシージャ)では、その引数の「値」をパラメータ化(=外部指定可能)することで、ちょっとづづ振る舞いが異なるメソッド群を用意せずとも、1つのメソッド実装コードの振る舞いを変更できます。

同様に、ジェネリック・メソッド(プロシージャ)では、その引数の「データ型」をパラメータ化することで、データ型だけが異なるメソッド群を用意せずとも、1つのジェネリック・メソッド実装コードの振る舞いを変更できます。

通常のクラスとジェネリック・クラスの関係も同様です。ジェネリック・クラスでは「データ型」をパラメータ化し、1つのジェネリック・クラス実装コードの振る舞いを変更できます。例えば、同一データ型の複数データを格納するコレクションクラスで利用されます。(扱うデータ型だけが異なるが、振る舞いは同じ。間違ったデータ型ではコンパイルエラーにしたい。)

投稿2015/03/07 02:30

yohhoy

総合スコア6191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ranran

2015/03/07 13:50

重複を減らす補修性を上げる。 すばらしいですね! 近しいコードを記述しているなと感じた際はジェネリックを意識してみます 回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問