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

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

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

クラスでのコードの書き方

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

■85540 / inTopicNo.1)  クラスでのコードの書き方
  
□投稿者/ ひろぽん (1回)-(2017/11/04(Sat) 08:32:12)

分類:[.NET 全般] 

いつもはVBでモジュールにコードを書いているのですが
クラスに書く方が一般的なそうなので、
クラスでも書いてみたいと考えています。


Public Class Class1

Public Shared Function test(r%) As Integer

Return r * 3

End Function

End Class


Public Class Class3
Public Sub ees()

Dim sss As New Class1
Dim hhh = sss.test(3)

End Sub
End Class

とすると
共有メンバー、定数メンバー、列挙型メンバー、または入れ子にされた型にインスタンス経由でアクセスしています。正規の式は評価されません。 DMM時間出力プログラム D:\Documents and Settings\My Documents\Visual Studio 2015\Projects_VB\Source\DMM時間出力プログラム\sln\Class3.vb 5 アクティブ


というエラーがでます。


Public Shared Function test(r%) As Integer

Public Function test(r%) As Integer

にするとエラーが出なくなりますが、
Sharedはつけなくて良いのでしょうか?

よくサンプルコードを見るとSharedがついている場合がほとんどですが
どう違うのでしょうか?



引用返信 編集キー/
■85542 / inTopicNo.2)  Re[1]: クラスでのコードの書き方
□投稿者/ WebSurfer (1330回)-(2017/11/04(Sat) 10:25:09)
No85540 (ひろぽん さん) に返信

> よくサンプルコードを見るとSharedがついている場合がほとんどですが
> どう違うのでしょうか?

以下の記事が参考になりませんか?

インスタンス・メソッドと静的メソッドの違い
http://www.atmarkit.co.jp/ait/articles/0408/14/news015_4.html

ちなみに、質問者さんが定義したメソッド te stには Shared キーワードが付与されて
いるので静的メソッドになります。

なので、Dim hhh = sss.test(3) ⇒ Dim hhh = Class1.test(3) に訂正すればエラーは
解消すると思います。

「インスタンスメソッド」「静的メソッド」でググると他にも参考になりそうな記事が
ヒットすると思います。
引用返信 編集キー/
■85543 / inTopicNo.3)  Re[2]: クラスでのコードの書き方
□投稿者/ ひろぽん (3回)-(2017/11/04(Sat) 10:57:46)
No85542 (WebSurfer さん) に返信


ありがとうございます。

ちなみに、Sharedで宣言したとして、
Public Class Class1 spectrum_analyzer_converter
Public Shared Function test_func(r%) As Integer

みたいに、function名が長い場合、

毎回、

dim GGG = spectrum_analyzer_converter.test_func(3)

のようにクラス名を全て書かないといけないのでしょうか?

ものすごく見づらいコードになると思うのですが、
これが一般的ですか?

 
引用返信 編集キー/
■85544 / inTopicNo.4)  Re[3]: クラスでのコードの書き方
□投稿者/ 魔界の仮面弁士 (1451回)-(2017/11/04(Sat) 11:11:23)
No85543 (ひろぽん さん) に返信
> Public Class Class1 spectrum_analyzer_converter
そもそもコンパイルが通りません。


> ものすごく見づらいコードになると思うのですが、
> これが一般的ですか?

Class1 と Class3 とか spectrum_analyzer_converter とか
eee とか test とか とか test_func とか書かれていますが、
名前を見ても役割が想像できないようなコーディングは、
Module であれ Class であれ、そもそも望ましくありません。

提示頂いた内容だけでは、元のコードの意図が分からないので、なんとも言えませんが、
見づらいと感じるのは、クラス設計や名前付けに問題があるからではないでしょうか。

Module にせよ Class にせよ Structure にせよ、
どの情報をどのオブジェクトのどのメソッドで処理するのかという
「クラス設計」および「名前付け」が重要なわけで。
引用返信 編集キー/
■85545 / inTopicNo.5)  Re[3]: クラスでのコードの書き方
□投稿者/ WebSurfer (1331回)-(2017/11/04(Sat) 11:44:53)
No85543 (ひろぽん さん) に返信

> ものすごく見づらいコードになると思うのですが、
> これが一般的ですか?

「一般的」云々の話ではありません。

文法の話で、静的メソッドは <クラス名>.<メソッド名> というように、インスタンス
メソッドは <クラスのインスタンスへの参照>.<メソッド名> というように使うという
ことだけです。

見づらいというなら、見づらくならないように命名すれば済む話だと思いますが。

引用返信 編集キー/
■85547 / inTopicNo.6)  Re[2]: クラスでのコードの書き方
□投稿者/ 魔界の仮面弁士 (1452回)-(2017/11/04(Sat) 17:23:41)
No85542 (WebSurfer さん) に返信
> ちなみに、質問者さんが定義したメソッド te stには Shared キーワードが付与されて
> いるので静的メソッドになります。

WebSurfer さんも No85545 でも書かれていますが、
Visual Basic でのメソッドの呼び出しは、基本的に
  <オブジェクト>.<メソッド名>(<引数群>)
という構文で呼ばれます。

インスタンスメソッドの場合は<オブジェクト>の部分が変数名となります。
共有メソッド(Shared)の場合は<オブジェクト>の部分が型名になります。


そして、自分自身(Me/MyClass) あるいは Module が持つメソッドを呼ぶ場合は、
上記の <オブジェクト>. の部分を省略して、
  <メソッド名>(<引数群>)
という構文でも呼び出すことができていた、ということです。
Moduel1.Test(1) を Test(1) と書ける様に。



> 「インスタンスメソッド」「静的メソッド」でググると他にも参考になりそうな記事が
> ヒットすると思います。

この辺、用語的にややこしい部分があるので、
以下補足として:


※注1※
 Visual Basic における共有メソッド(Shared)と、
 C# における静的メソッド(static)は、同じものを指します。


※注2※
 Visual Basic における共有変数(Shared)と、
 C# における静的変数(static)は、同じものを指します。


※注3※
 Visual Basic における Static (静的変数)は、
 C# における static キーワードとは無関係です。
 (VB の Static 変数に相当する機能は C# にはありません)


※注4※
 C# における static class は、
 VB における Module に相当します。(多少の違いはありますが)
引用返信 編集キー/
■85548 / inTopicNo.7)  Re[3]: クラスでのコードの書き方
□投稿者/ WebSurfer (1332回)-(2017/11/04(Sat) 19:51:42)
No85547 (魔界の仮面弁士 さん) に返信

フォローありがとうございます。なるほどです。さすがです。
引用返信 編集キー/
■85550 / inTopicNo.8)  Re[4]: クラスでのコードの書き方
□投稿者/ ひろぽん (4回)-(2017/11/05(Sun) 08:33:26)
みなさま、非常に勉強になりました。

ありがとうございます。
 
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ