VB.NETとC#の違い

解決


マグ  2004-08-12 13:16:11  No: 115565  IP: [192.*.*.*]

題名の通りですが、
VB.NETとC#はどのように違うのでしょうか?

C#は何が出来るけど、VB.NETはできないとかというような感じで
教えてください。
お願いします。

編集 削除
36NET  2004-08-12 15:08:44  No: 115566  IP: [192.*.*.*]

そうゆうことは@ITとかを読んで勉強しましょう

個人にはできるできないではなくこの処理ならこの言語の方が効率が良いとか
そんなかんじで開発言語さらにはOSを選択してますね

↓とか
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_000/cs2_000_01.html#cs0004

編集 削除
マグ  2004-08-12 16:22:28  No: 115567  IP: [192.*.*.*]

処理に応じて使い分けをするってことですね。
今まで知りませんでした。

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

編集 削除
マグ  2004-08-12 19:25:58  No: 115568  IP: [192.*.*.*]

追加質問です。

C#の言語は主にどのような処理をするときに使うのでしょうか?

できれば、VB.NETも教えてください。

編集 削除
36NET  2004-08-13 09:14:02  No: 115569  IP: [192.*.*.*]

昔からよくいわれてるのは(私的)
ファイル操作はC言語の方が早い?

後は
将来的に脱Windows予定だから移植時の工数削減の為Cで作ってるとか
  (無論APIとかWindowsCにしか無い機能も使っちゃ駄目ですが)
CDで配布する場合など必要なDLLを一緒に入れておけば実行端末に
ランタイムがなくてもさらにはsetupしなくてもCDから直接実行
出来るとかとか

VBは
http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20010131/1/
処理とゆうよりはとっつきやすいってところでしょうかね?

編集 削除
マグ  2004-08-13 10:14:35  No: 115570  IP: [192.*.*.*]

ではC#はランタイムが必要あるけど、
C++.NETはランタイムが必要ないということでしょうか?

編集 削除
36NET  2004-08-13 10:51:41  No: 115571  IP: [192.*.*.*]

お?C# = C++.NET じゃないのか?
ごめんなさい.NET系のくくりがいじったこともないしよくわかってません

そこらへんはCの板で聞いた方が適切なアドバイスがもらえると思いますよ?

編集 削除
Dental  2004-08-13 11:21:24  No: 115572  IP: [192.*.*.*]

.NETにおいては、IL(中間言語)という物が使われるのは御存知ですよね。
http://park16.wakwak.com/~mimi/dotnet/misc/msil.html

VBで作られようが、C#で作られようが、コンパイルされれば、
ILコードに変換されます。ILは、環境に依存しない共通言語で、
.NETのCLR(共通言語ラインタイム)を直接呼び出す事のできるコードです。

ILコード自体は共通なので、どの言語で作成されたexeであっても、
速度面では全く変わりません。(コンパイラの性能等によって、
どのようなILコードに翻訳されるかという違いはあるかもしれないけど)

なので結局の所、コンパイルすれば(MSILのコードになってしまえば)、
どの言語で作られたか、という事は関係ないです。.NETにおいては。


IL自体は、作成された言語に依存しない共通のコードになりますので、
たとえば、 Reflector for .NET などのフリーソフトを使えば、
コンパイルして作成されたexe, dllファイル等をもとにして、
それを C# のコードに変換することも、VB のコードにする事さえできます。

http://www.atmarkit.co.jp/fdotnet/tools/dotfuscator/fuscator04.gif
http://www.atmarkit.co.jp/fdotnet/tools/dotfuscator/fuscator05.gif
http://www.aisto.com/roeder/dotnet/


つまるところ、作成される成果物がほぼ同じである以上、あとは、
「自分(または共同開発する人達)が使い慣れた言語でコーディングする」
という選び方をすれば良いのではないかと。


各言語の良し悪しは、宗教論になってしまうので書きませんが、
とりあえず、言語の違いを幾つか書いてみると。。。


[VB]
・変数やクラス名で、大文字小文字を区別しない。
・レイトバインドによるコーディングが容易。(Option Strict Off)
・演算子をオーバーロードできない。(次期バージョンから対応)
・言語仕様は、Microsoftの独自実装。


[C#]
・変数やクラス名で、大文字小文字が区別される。
・レイトバインドが面倒。(http://support.microsoft.com/?id=302902)
・演算子のオーバーロードが可能。
・言語仕様が ECMA-334 によって標準化されており、Microsoft以外からもコンパイラが提供されている。


> ではC#はランタイムが必要あるけど、
> C++.NETはランタイムが必要ないということでしょうか?
C++.NET で、「.NETのアプリ」を作った時は必要ですが、
「.NETではないアプリ」を作った時は不要です。

VB.NETやC#.NETは、「.NETのアプリ」は作れますが、
「.NETではないアプリ」は作れないため、.NETランタイムが必須です。

編集 削除
マグ  2004-08-13 14:28:34  No: 115573  IP: [192.*.*.*]

コンパイルってどういう意味でしょうか?

あと、演算子のオーバーロードとはどういう意味か分かりません。
基本的なこととは存じますが、教えてください。

あと、もうひとつ。

では、ランタイムを使用しないC++の無料ソフトを配っている所を
教えてください。

編集 削除
36NET  2004-08-13 15:16:30  No: 115574  IP: [192.*.*.*]

いやいや「コンパイル」とか「演算子のオーバーロード」は
用語の説明みたいなもんなんで聞くんじゃなくて自分で
調べましょうよ
http://www.google.co.jp/

編集 削除
マグ  2004-08-14 10:02:26  No: 115575  IP: [192.*.*.*]

VB.NETでソースを入力して、EXEファイルを生成し、
そのEXEファイルを使いC#やC++のソースに変えるソフト
http://www.aisto.com/roeder/dotnet/のURLのどこら辺にあるでしょうか?
探しましたけれど、見つかりません。

用語関係に関しては自分で調べておきます。
ありがとうございました。

編集 削除
魔界の仮面弁士  2004-08-14 15:36:51  No: 115576  IP: [192.*.*.*]

http://www.aisto.com/roeder/dotnet/のURLのどこら辺にあるでしょうか?
> 探しましたけれど、見つかりません。
『Reflector for .NET』と書かれたスクリーンショットの所に、
[Reflector.zip] というリンクがありますよね? (^_^;)

> コンパイルってどういう意味でしょうか?
高級言語(VBやC#などといった、人間にとって読みやすい言語)を、
低レベル言語(CPUが理解しやすい言語)に置き換える作業の事を
compile と言います。とりあえずは、「DLLやEXEを作る事」と
思っておけば良いかと。

で、コンパイルを行うためのプログラムの事を、コンパイラ
(compiler)と言います。なお、.NET Frameworkにおいては、
VB用コンパイラのVBC.EXE、C#用コンパイラのCSC.EXE、
JScript用コンパイラのJSC.EXEなどが用意されています。


> 演算子のオーバーロードとはどういう意味か分かりません。
演算子、は分かりますよね。「+」とか「/」とか「=」などです。

例えば、現在の VB.NET 2002/2003 においては、SqlInt16型の
変数同士を足し算しようと思ったら、
  A = SqlTypes.SqlInt16.op_Implicit(1)
  B = SqlTypes.SqlInt16.op_Implicit(2)
  C = SqlTypes.SqlInt16.op_Addition(A, B)
もしくは、
  A = New SqlTypes.SqlInt16(1)
  B = New SqlTypes.SqlInt16(2)
  C = SqlTypes.SqlInt16.Add(A, B)
のように書かなくてはいけません。

これが VB.NET 2005 であれば、
  Dim A, B, C As System.Data.SqlTypes.SqlInt16
  A = 1
  B = 2
  C = A + B
のようなコードが書けるようになります。


また、自分で作ったオブジェクト同士でも四則演算等ができるようになります。
例えば、以下のような「複素数クラス MyComplex」を定義すれば、
    Dim c1 As New MyComplex(2, 4)
    Dim c2 As New MyComplex(3, 5)

    Console.WriteLine(c1)       '2.00 + i4.00
    Console.WriteLine(c2)       '3.00 + i5.00
    Console.WriteLine(c1 + c2)  '5.00 + i9.00
のような事ができるようになる予定です。


'複素数クラスの作成
Structure MyComplex
    Private r As Double
    Private i As Double
    Public Sub New(ByVal r As Double, ByVal i As Double)
        Me.r = r
        Me.i = i
    End Sub
    Public Overrides Function ToString() As String
        If 0.0 <= i Then
            Return String.Format("{0:F2} + i{1:F2}", r, i)
        Else
            Return String.Format("{0:F2} - i{1:F2}", r, -i)
        End If
    End Function

    '☆加算演算子のオーバーロード☆
    Shared Operator +(ByVal x As Complex, ByVal y As Complex) As MyComplex
        Return New Complex(x.r + y.r, x.i + y.i)
    End Operator
End Structure

編集 削除
マグ  2004-08-15 11:38:25  No: 115577  IP: [192.*.*.*]

ありがとうございました。
なんとなく分かりました。
とこえろでJavaScriptのコンパイラーってありますでしょうか?
エラーがでてしまうと原因がわかりずらくって・・・
メモ帳でソースを記述していますから・・・
どうしても必要です。
質問ばかりですみませんが、教えてください。
お願いします。

編集 削除
Dental  2004-08-15 17:23:02  No: 115578  IP: [192.*.*.*]

> とこエロでJavaScriptのコンパイラーってありますでしょうか?
JavaScriptのコンパイラは知りませんが、
JScriptのコンパイラなら、JSC.EXEです。
(JSC.EXE は、.NET Framework SDKに付属しています)


> エラーがでてしまうと原因がわかりずらくって・・・
VBScript や JScript などの、「Windows Script」での開発時には、
下記の「Script Debugger」というツールを使う事で、スクリプトを
一行ずつ「ステップ実行」したり、変数の内容を参照/編集しながら
実行することができるようになります。
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=E606E71F-BA7F-471E-A57D-F2216D81EC3D

Visual Studioがあるなら、それを利用する事もできます。

編集 削除
マグ  2004-08-16 10:48:53  No: 115579  IP: [192.*.*.*]

Visual Studio  .NET 2003ですけど、
JScriptのコンパイラってどこにあるんでしょうか?
探しても見つかりません。

JavaScriptのコンパイラはないんですか・・・(TT)
だれか作ってる方いませんか?

編集 削除
Dental  2004-08-16 12:11:09  No: 115580  IP: [192.*.*.*]

> Visual Studio  .NET 2003ですけど、
> JScriptのコンパイラってどこにあるんでしょうか?
スタートメニューから、
  [プログラム]
   +[Microsoft Visual Studio .NET 2003]
     +[Visual Studio .NET ツール]
       +[Visual Studio .NET 2003 コマンド プロンプト]
を起動してください。その上で、
  JSC C:\TEST.JS
などというコマンドを実行すれば、TEST.JS がコンパイルされ、
TEST.EXE が生成されます。(JSC /? にてヘルプが表示されます)
http://www.microsoft.com/japan/msdn/library/ja/jscript7/html/jsconcompilingjscriptcodefromthecommandline.asp

> 探しても見つかりません。
もう一度、いや、あと10回は探してください。
HDDに無ければ、CD/DVDの中までも。

> JavaScriptのコンパイラはないんですか・・・(TT)
個人的には、なんでJavaScriptコンパイラなんかを欲しがるのか、
奇妙に思えるのですが、いずれにしろ、InternetExplorer等は
JavaScriptを解釈できないので、MSからは提供されていないでしょう。
たとえHTMLで、<SCRIPT LANGUAGE="JavaScript">と書いたとしても、
IEはそれを、JScriptの構文として実行しますしね。

> だれか作ってる方いませんか?
googleで「JavaScript compiler」で検索してみましたか?
もし、期待通りの物が無いなら、自分で作って見ては如何ですか。:-P

編集 削除
マグ  2004-08-16 19:29:12  No: 115581  IP: [192.*.*.*]

Javascriptでソースを

alert('Hello');

のように記述して、
仕掛け上  JScript=JavaScriptだろうと思い、
Visual Studio .NET 2003 コマンド プロンプトで言われたとおりに
操作したのですけれど、alertが宣言されていません。っとエラーが発生してしまいました。
原因はなんでしょうか?

あと、拡張子が.javaになっているファイルをコンパイルして、.classに変えたいのですけれど、
変える方法を教えてください。

バージョン:Visial Stadio.NET 2003です。

JavaScriptのコンパイラに関しては、
JavaScriptのソースをスペルチェックする程度のソフトを自作します。

編集 削除
Dental  2004-08-16 19:40:35  No: 115582  IP: [192.*.*.*]

> あと、拡張子が.javaになっているファイルをコンパイルして、.classに変えたいのですけれど、
> 変える方法を教えてください。

板違いです。マグさん、先々週にも注意したと思いますが、
ここは「Visual Basic」の掲示板です。マナーは守ってください。

編集 削除
マグ  2004-08-17 11:12:22  No: 115583  IP: [192.*.*.*]

分かりました。

JavaScriptのソースをスペルチェックする程度のソフトを作るのをやめました。
理由は使う必要がないし、エラーをそんなに出していないから作る必要が
ないと判断してやめました。

編集 削除
マグ  2004-08-17 11:13:39  No: 115584  IP: [192.*.*.*]

解決を押し忘れました。

原因は後にわかるだろうっと言うことで解決?

編集 削除
?  2004-08-18 15:38:54  No: 115585  IP: [192.*.*.*]

マグさんは、もうすこし、質問するのを考えて質問した方がよいと思いますよ。

VB以外の質問をしたり、自分で調べれば多分わかるような質問ばかりのような気がします。同じ質問の中で解決がいくつもあったり。

答えていただける人の気持ちを考えてください。

編集 削除
マグ  2004-08-18 17:56:27  No: 115586  IP: [192.*.*.*]

今後、もう少し、考えながら、質問することにします。
アドバイス、ありがとうございます。

編集 削除