- PR -

キャストを作ることはできますか?

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-01-27 13:38
引用:

じゃんぬねっとさんの書き込み (2006-01-27 10:20) より:

静的な読み取り専用のフィールドや、静的な定数フィールドであれば普通に使います。
私個人の意見としては「概念上」の問題が最もウェイトを占めています..



了解です。ありがとうございました。

ところで、僕はプロパティを定義する場合、次のようなコードを記述します。

コード:

#Region " 名前 プロパティ "
    '****************************************************************************
    ' 名前 プロパティ	
    '****************************************************************************
    Private _名前 As String

    Public Property 名前() As String
        Get
            Return (_名前)
        End Get
        Set(ByVal value As String)
            _名前 = value
        End Set
    End Property



考えてみれば、「名前」と「String」以外は常に同じです。
ならば、名前と型を入力すれば、自動的にコードを作ってくれる機能が欲しくなる訳ですが、何か良い方法やツールなどがありそうな気がします。
皆さんはどうされているのでしょうか?

#別スレ立てた方が良いですか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-27 14:22
引用:

R・田中一郎さんの書き込み (2006-01-27 13:38) より:

考えてみれば、「名前」と「String」以外は常に同じです。
ならば、名前と型を入力すれば、自動的にコードを作ってくれる機能が欲しくなる訳ですが、
何か良い方法やツールなどがありそうな気がします。


コード スニペットとか、リファクタリング ツールということでしょうか?
後者の場合、フィールドとして定義した後に、プロパティ構文を生成して置換するようなイメージです。

  Refactor for VB2005 のデモ

「Encapsulate Field」と呼ばれる機能がそれだと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-27 14:33
引用:

R・田中一郎さんの書き込み (2006-01-27 13:38) より:

考えてみれば、「名前」と「String」以外は常に同じです。
ならば、名前と型を入力すれば、自動的にコードを作ってくれる機能が欲しくなる訳ですが、何か良い方法やツールなどがありそうな気がします。
皆さんはどうされているのでしょうか?



2005 年の TechEd で羽村さんも似たようなことを言っていましたね
そのときはコードスニペットで代用していた気がします。

僕は普段 VisualStudio2003 を使用しいるので
キーボードマクロを記憶させてショートカットを割り当てて作成しています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-27 15:13
あったあった、本家サイトにありました。

  フィールドのカプセル化

ただ、Refactor! は VS2005 なんですよね。(C# と VB で違うみたいだし)
そういえば、私は何も気にせずに雛形をコピペしてコード書いてますね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-01-27 20:20
引用:

かるあさんの書き込み (2006-01-27 14:33) より:

2005 年の TechEd で羽村さんも似たようなことを言っていましたね
そのときはコードスニペットで代用していた気がします。

僕は普段 VisualStudio2003 を使用しいるので
キーボードマクロを記憶させてショートカットを割り当てて作成しています。



VisualStudio2003は キーボードマクロ の機能があるのですか。
コードスニペットの自作は、今度チャレンジしてみます。
ありがとうございました。

引用:

じゃんぬねっとさんの書き込み (2006-01-27 15:13) より:

ただ、Refactor! は VS2005 なんですよね。(C# と VB で違うみたいだし)



ありがとうございました。

先ほど落としてみたのですが、何故かインストールに失敗します。
vs2005 が見つからないからインストールできないと言っています。
Express だと駄目なのかも。

引用:

じゃんぬねっとさんの書き込み (2006-01-27 15:13) より:

そういえば、私は何も気にせずに雛形をコピペしてコード書いてますね。



僕も今までコピペしていたのですが、先のフィールド変数のプロパティ化で、単純作業が続いたため、簡略化できないものかと思ったのです。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-01-28 11:43
引用:

Express だと駄目なのかも。



Express Edition は機能拡張の類をサポートしてないですから。。。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-01-28 22:14
 んっと、「誰々が、こう言ったから、こうする」ではなく、「誰々が言った、こうするということに、あんな利点があって、それはこういう欠点があっても利用するべきだと思うから、こうする」として欲しいです。

> 考えてみれば、「名前」と「String」以外は常に同じです。
 だから、少なくともセッターは、同じであってはいけないの。。。(-_-;
 例えば、データがデータベースにしまわれているとすると、オブジェクトが作られるところは、ユーザがアプリケーションから手入力する箇所だけではなく、アプリケーションがデータベースからとってくるとことにもあります。あるいは、誰かが作った「バッチ登録用データファイル」かもしれません。こういう多方面からの登録データを検証する箇所を、データオブジェクトのセットアクセスメソッドで行えば、仕様変更による修正は少なくて済みますよね。


> ちなみに、データバインディングを使う場合、
> 性別もテーブルに持つことになるんでしょうか。
コード:
Public Enum 性別 As Integer
	法人 = 1
	男性
	女性
End Enum

Public Class 性別Accessor
	Private _表示名 As String
	Public ReadOnly Property 表示名 As String
		Get
			Return Me._表示名
		End Get
	End Property
	Private _値 As 性別
	Public ReadOnly Property 値 As 性別
		Get
			Return Me._値
		End Get
	End Property
	Public Sub 性別Accessor(表示名 As String, 値 As 性別)
		Me._表示名 = 表示名
		Me._値 = 値
	End Sub
End Class

Public Class 性別List
	Inherits List<性別Accessor>
	Private Shared instance As New 性別List()
	Private Sub 性別List()
		Dim names() As String = Enum.GetNames(TypeOf 性別)
		Dim values() As Integer = Enum.GetValues(TypeOf 性別)
		For idx As Integer = 0 To names.Length - 1
			Me.Add(New 性別Accessor(names(idx), values(idx)))
		Next
	End Sub
	Public Shared Function GetInstance() As 性別List
		return Me.instance
	End Function
End Class


 性別List を DataSource に指定して、DisplayMember に 表示名 、ValueMember に 値 を指定。C# で作っているのを VB 形式になおしながら転記したので、動くはずだけど、スペルミスなどあるかも。

 継承元クラスのメソッドのアクセスレベルを変更することって出来ないんだっけ?
new private void Add(..) ってやっても、インテリセンスが表示するし、コンパイルも通る。。。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-28 23:03
引用:

Jittaさんの書き込み (2006-01-28 22:14) より:

継承元クラスのメソッドのアクセスレベルを変更することって出来ないんだっけ?
new private void Add(..) ってやっても、インテリセンスが表示するし、コンパイルも通る。。。


どこかのスレッドでも話題になっていましたが、無理ですよね。
派生クラスが private になっているから、公開されている基底クラスの同名メソッドを見に行きますね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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