クラスプロパティの内部からの利用 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るきお  (社会人)
投稿日時
2023/11/6 19:42:34
プロパティをクラスの内部から利用することに問題はありません。
クラスの内部からしか利用しないのであれば、Public Propertyではなく、Private Propertyのように宣言しておくのが間違いがなくてよいです。
外からも利用する可能性があるのであればPublic Propertyでも問題ありません。
状況次第ではProtected Property や Friend Property もありえます。
ところで、数字の値を 0 埋めして13桁にするには次のような方法もあります。
3つのやり方を紹介します。下記の reuslt1, result2, result3 のどれもが "0000000000123" になります。
後余談ですが、ByVal は最近は省略するので、ByValが付いているとなんだか古いプログラム見えます。
クラスの内部からしか利用しないのであれば、Public Propertyではなく、Private Propertyのように宣言しておくのが間違いがなくてよいです。
外からも利用する可能性があるのであればPublic Propertyでも問題ありません。
状況次第ではProtected Property や Friend Property もありえます。
ところで、数字の値を 0 埋めして13桁にするには次のような方法もあります。
3つのやり方を紹介します。下記の reuslt1, result2, result3 のどれもが "0000000000123" になります。
'Integerの場合
Dim intValue As Integer = 123
Dim result1 As String = intValue.ToString("D13")
Dim result2 As String = $"{intValue:D13}"
'Stringの場合
Dim strValue As String = "123"
Dim result3 As String = strValue.PadLeft(13, "0")
後余談ですが、ByVal は最近は省略するので、ByValが付いているとなんだか古いプログラム見えます。
投稿者 miz  (社会人)
投稿日時
2023/11/6 16:48:12
よろしくお願いします。
以下のようにクラスを作り、Propertyを内部から利用するのは問題ないでしょうか
Public Propertyとして定義した_Syouhin_CdをNewで使用しています。
実際はNewだけでなく別のメソッド等でも使います。
Property は外部からアクセスする為に作ると教本にあったので
内部から使えるとは思っていなかったのですがエラーが出ず意外でした
単なる無知なら良いのですがお願い致します。
Public Class testClass1
Private P_Syouhin_CD As String = ""
Public Property _Syouhin_Cd() As String
Get
Return P_Syouhin_CD
End Get
Set(ByVal value As String)
P_Syouhin_CD = Str_To_Cd(value, 13)
End Set
End Property
Private Function Str_To_Cd(ByVal In_Str As String, ByVal Ketasuu As Integer) As String
Dim W_Cd As Long = 0
If In_Str <> "" Then
W_Cd = Long.Parse(In_Str)
End If
Dim Rtn_Str As String = W_Cd.ToString(New String("0", Ketasuu))
Return Rtn_Str
End Function
Public Sub New(ByVal Syouhin_CD As String)
_Syouhin_Cd = Syouhin_CD
End Sub
End Class
以下のようにクラスを作り、Propertyを内部から利用するのは問題ないでしょうか
Public Propertyとして定義した_Syouhin_CdをNewで使用しています。
実際はNewだけでなく別のメソッド等でも使います。
Property は外部からアクセスする為に作ると教本にあったので
内部から使えるとは思っていなかったのですがエラーが出ず意外でした
単なる無知なら良いのですがお願い致します。
Public Class testClass1
Private P_Syouhin_CD As String = ""
Public Property _Syouhin_Cd() As String
Get
Return P_Syouhin_CD
End Get
Set(ByVal value As String)
P_Syouhin_CD = Str_To_Cd(value, 13)
End Set
End Property
Private Function Str_To_Cd(ByVal In_Str As String, ByVal Ketasuu As Integer) As String
Dim W_Cd As Long = 0
If In_Str <> "" Then
W_Cd = Long.Parse(In_Str)
End If
Dim Rtn_Str As String = W_Cd.ToString(New String("0", Ketasuu))
Return Rtn_Str
End Function
Public Sub New(ByVal Syouhin_CD As String)
_Syouhin_Cd = Syouhin_CD
End Sub
End Class
また色々教えて頂きありがとうございます。
VB2から使っていたのでByValの省略は驚きでしたが時代の流れなんですね
1人で作っているのでこのような話は大変助かります
ありがとうございました。