• ベストアンサー

VB2008: クラスライブラリとはなんなのか?

yagumaの回答

  • yaguma
  • ベストアンサー率57% (4/7)
回答No.2

標準ライブラリというのは、関数の集まりです。クラスライブラリはクラスの集まりです。 クラスやインスタンス、オブジェクトという考え方が身についていないと、すっきりと理解するのは難しいと思いますが、まだプログラミングを始めて間もないということでしたら、あまり深く考えずに「使える機能を使う」という考え方でもいいのではないでしょうか。 ちなみに、なぜSystem.Text.EncodingクラスはNewする必要がないかというと、このクラスは公開されたコンストラクタを持っていません。利用者が明示的にNewしてインスタンス化することはできないということです。 ですが、Dim ec As Encoding として宣言された変数ecは、ちゃんとEncodingクラスのインスタンスを指しています。なぜかというと、Encoding.Defaultプロパティが、内部的にEncoding型のインスタンスを生成して返すからです。 Encodingクラスに定義されたメソッド、例えば GetByte() を ec.GetByte("hoge") のように呼び出すことができるのはそういう理屈です。 決して「複数のプロパティやメソッドを装備しないのだ単なる標準ライブラリのクラスライブラリ版」というわけではないのです。

noname#140971
質問者

補足

>このクラスは公開されたコンストラクタを持っていません New は、その通りだと理解しています。 が、負に落ちないのは、次の点です。 Import System.text Dim ec as System.text.・・・ この両者でも exe ファイルのサイズは同じ。 Import System.text の一文が System.txt に置換されていれば・・・。 Ststem.Text 名前空間の Encoding クラスの GetEncoding メソッドだけを宣言すれば・・・。 この両者では exe ファイルのサイズは違う 「コンパイラは必要な置換対象を特定してからコンパイルしている」 ならば、冒頭に Import文を書いてもいいのじゃないか? Dim ec as System.text.・・・ でなく Dim ec as Encoding.・・・ でいいのじゃないか? この辺りは、どうなんでしょうか?

関連するQ&A

  • Try~Catch、Finallyについて。

    下記のように、DataSetをXML出力するメソッドを作りました。 Public Sub WriteXml(ByVal xmlDs As DataSet) Try Dim fileStream As New System.IO.FileStream(holdFilePath, System.IO.FileMode.Create) Dim setting As New System.Xml.XmlWriterSettings '文字コード設定 With setting .Encoding = System.Text.Encoding.UTF8 .Indent = True End With Dim writer As System.Xml.XmlWriter = Xml.XmlWriter.Create(fileStream, setting) 'XMLへの書き込みを行い、FileStreamを閉じる xmlDs.WriteXml(writer) writer.Close() fileStream.Close() Catch ex As Exception MsgBox(ex.message) End Try End Sub メソッドは以上です。 writer.Close()、fileStream.Close()については、確実に 処理を行いたいので、Finallyで行おうかと思ったのですが、 その場合、Dim fileStream~、Dim writer~はTryの外に出さないと、 宣言されていないと言われてしまいます。 そうなると今度は、NewやXml.XmlWriter.Create(fileStream, setting) でコケた場合にCatchが出来ません…。 Usingを使うのが近いかなと思ったんですが、複数Newしている場合 でも使えるのでしょうか? 確実にClose処理を行うための改修箇所、アドバイスいただけ ないでしょうか? よろしくお願いします。

  • VB2005でのテキストファイルのアクセス権

    ある条件の下テキストファイルを出力していますが、 出力ファイルを開いた状態で、再度ツールを実行すると 「別のプロセスが・・・アクセスできません。」 というエラーにはじかれてしまいます。 現在VB2005を使用していますが、以前VB6のときはエラーに なりませんでした。 ※Excelの場合はエラーになっていましたけど。 以下私のコードを抜粋 strNewDirはString型でパスが入っています。 Dim stFile As Stream = New FileStream(strNewDir, FileMode.OpenOrCreate) Dim encSJIS As Encoding = Encoding.GetEncoding("shift-jis") Dim swSJIS As StreamWriter = New StreamWriter(stFile, encSJIS) ・・・ swSJIS.Close() という形でファイルアクセスしています。 New FileStreamには[Access]や[Share]などがあるようで、 いろいろ試しましたが、どうもうまくいきません。 ご存知の方いらっしゃいますか?

  • Visual Basic 2005 クラスライブラリの使い方

    異なるクラス間で共通の変数aを使いたいのですが、うまくいきません。あるクラスForm1でaを宣言しても他のクラスClass1でも宣言しないとエラーが出てしまいます。 以下のクラスをデバイスアプリケーションとして作成し、 Public Class Form1 Public a As Integer = 100  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Test As New MyLibrary.Class1 Test.Plus1() MsgBox(a, MsgBoxStyle.Information, "実験") End Sub End Class 以下のクラスをクラスライブラリMyLibraryとして作成します。 Public Class Class1 Dim a As Integer = 0 Public Sub Plus1() a += 1 End Sub End Class Form1でボタンを押すと、メッセージボックスに100と表示されます。 (関数Plus1の効果なし) ちなみにClass1の「Dim a」を「Static a」にしてクラスライブラリ(DLL)を最初に呼び出したときだけ初期化すればよいと思ったのですが、そうすると「'Static' は、メンバ変数宣言では有効ではありません。」というエラーが出てしまいます。 解決方法をご存知の方、ご教授願います。 また、クラスライブラリ(DLL)を作成するとまとまりができてプログラムの変更がしやすいと思いますが、やはり処理速度が遅くなるなどの問題もあるのでしょうか?

  • VB2008: ファイルから1行づつ読み込む関数のバグの修正方法?

    ' ========================================== ' 全ての行を読み込んで "" 行以外を出力する ' ========================================== Module theGrap   Sub Main()     Dim iNow As Integer = 0     Dim iNext As Integer = 0     Dim aLine As String = ""     Do       iNow = iNext       aLine = FGets("D:\Temp\Test4.txt", iNow, iNext)       If aLine = "" Then Continue Do       Debug.Print(aLine)     Loop Until iNext = -1   End Sub End Module [イミディエイト ウインドウ] 123あいうえお90 123かきくけこ90 123さしすせそ90 と、成功しています。 ' -------------- ' 行末まで読む ' -------------- Do   fs.Seek(iNowPosition, SeekOrigin.Begin)   fs.Read(aBuf, 0, 2)   aChar = ec.GetString(aBuf).Substring(0, 1)   If aChar <> Chr(13) Then     aChars &= aChar   Else     iNowPosition = iNowPosition - 1     Exit Do   End If   iNowPosition += txt.LenB(aChar) Loop While iNowPosition < fs.Length And (aChar <> Chr(13) Or aChar <> Chr(10)) しかし、実は、FGets 関数では1文字づつ読み込んでいます。 そこで、StreamReader で一行を読み込むように修正。 [イミディエイト ウインドウ] 123?????90 123?????90 123?????90 すると見事に化けてしまいました。 化けること自体は理解できるのですが、化けを修正する術がわかりません。 Function FGetl(ByVal aFile As String, _         ByVal iNowPosition As Integer, _         ByRef iNextPosition As Integer) As String   Dim aBuf(1) As Byte   Dim aChars As String = ""   iNextPosition = -1   If File.Exists(aFile) Then     Try       Using fs As FileStream = New FileStream(aFile, FileMode.Open, FileAccess.Read)         Dim sr As StreamReader         Dim ec As Encoding = Encoding.Default         fs.Seek(iNowPosition, SeekOrigin.Begin)         sr = New StreamReader(fs)         aChars = sr.ReadLine         iNowPosition += txt.LenB(aChars)         iNextPosition = NextPosition(fs, iNowPosition)         fs.Close()         Return aChars       End Using     Catch ex As IOException       MsgBox(ex.Message & "(FGets)", MsgBoxStyle.Exclamation, "エラー:")       Return ""     End Try   Else     Return ""   End If End Function 文字の化けを修正する方法を教えて頂ければ幸いです。

  • ViualC++でのクラスライブラリの使い方がわかりません

    VisualC++(CLR)でクラスライブラリを作っています。 始め、やり方がわからないので、ひとまず 「Initメソッドを呼び出したらメッセージボックスを表示する」 と、したかったのですが、 System:: までアクセスできるものの、 System::Windows にアクセスできませんなぜでしょう? 更に、始めクラスライブラリを生成したときに //TODO メソッドはここに記述してください と書かれているのですが、そこ以外に記述していけないんでしょうか? わかる方お願いします

  • 排他ロックが掛かっているファイルを読み込む

    排他ロックが掛かっている(別のプロセスが使用している) テキストファイルを読み込みたいのですが、 System.IO.FileStreamを実行した後に、IOExceptionエラーが発生し、 読み込みができません。 System.IO.FileStreamにはこだわってませんので、 排他ロックが掛かっているテキストファイルを読み込む方法を ご存知の方は、ご教授頂けませんでしょうか。 宜しくお願いします。 <ソースコード> 'ファイルパス wFullPath = "\\XXX.XXX.XXX.XXX\TEXT\TEST.TXT" (XXX.XXX.XXX.XXX:IPアドレス) 'ファイルを開く Dim fs As New System.IO.FileStream(wFullPath, _ System.IO.FileMode.Open, _ System.IO.FileAccess.ReadWrite, _ System.IO.FileShare.ReadWrite) 'FileStreamを基にしたStringReaderのインスタンスを作成 Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("shift_jis") Dim sr As New System.IO.StreamReader(fs, enc) 'ファイルの内容をすべて読み込む Dim s As String = sr.ReadToEnd() <開発環境> 言語:VB.NET Microsoft Visual Studio 2008 Microsoft .NET Framework Version 3.5 SP1

  • VB.NETで出来てC#で出来ない???

    VB.NETでは出来るのにC#で同じようにするやり方がわからなくて困っています。 VSのバージョンは2008です。 やりたいことは 『param.Item("AAA") = "111"』 このように書けるクラスを作りたいのですが、 VBで出来てC#では出来ないのでしょうか? イメージとしてはプロパティにメソッドをくっつけたようなクラス? C#ではこのように書くとエラーになります。 どのようにしたらいいでしょうか? public string Item(string Key) {  set { _param[Key] = value; } } VB Dim param As New Param() param.Item("AAA") = "111" ----Paramクラス---- Imports System.Text Public Class Param Private _Hash As New Hashtable Default Public Property Item(ByVal Key As String) As String Get Return _Hash(Key) End Get Set(ByVal value As String) _Hash(Key) = value End Set End Property End Class ---------

  • VBのクラスの利用

    VBの初心者ですが、FormにTextBoxとコマンドボタンを配置して、ボタンクリックでTextBoxに"ABC"と表示させるものをクラスを使ってやろうと思っています。WriteAクラスを作り、その中にkakikomiメソッドを作り、引数を(TextA AS TextBox)とし、メソッド内部でTextA.Text="ABC"としました。 コマンドボタンクリックメソッド内部で、  Dim obj As WriteA  Set obj=New WriteA  obj.kakikomi(Text1)//Text1はTextBoxのオブジェクト名 とすると、[引数の型が違う]でコンパイル出来ません。どうしたら良いのでしょうか?

  • VB2008 txtファイル保存

    こんにちは、Vb2008を勉強しています。 デスクトップに保存している、TXTファイルに、 フォームで入力したデータを追加保存したいと思い、ネットで調べたり…で 入力しましたが、txtファイルを開いてみると文字化けしてしまします。 Dim writer As System.IO.FileStream = _ System.IO.File.OpenWrite("C:\Users\Desktop\顧客管理.txt") 'SystemWriterオブジェクトを作成し、テキストデータが書き込めるようにする Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(writer) 'ファイルの末尾に移動する sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) 'データを書き込む sw.WriteLine(TextBox1.Text & "," & TextBox2.Text & "," & TextBox3.Text) 'ファイルを更新する sw.Flush() 'ファイルを閉じる sw.Close() writer.Close() 上記の方法で文字化けだったので、またまた、調べて入力しましたが 今度は、改行されず…単純な、データの追加のようになってしまっています。 私は、新しい行に追加できるようにしたいです。 下のコードは文字コードの指定をしたので、保存はできますが、 改行されません。 Dim FileName As String = "C:\Users\Desktop\確認.txt" Dim Writer As IO.StreamWriter Dim Encode As System.Text.Encoding '文字コードにShiftJISを指定。 Encode = System.Text.Encoding.GetEncoding("Shift-JIS") '既に存在するテキストに追加する場合は第2引数をTrueにする。 Writer = New IO.StreamWriter(FileName, True, Encode) Writer.Write(TextBox1.Text & "," & TextBox2.Text) Writer.Close() どなたか、教えていただけませんでしょうか?

  • VB6.0にてStreamReaderを使用したいのですが、

    VB6.0にてStreamReaderを使用したいのですが、 Dim Reader As New IO.StreamReader("C:\Windows\System32\eula.txt", のコードが赤字でエラーになります。 どう修正すればよろしいでしょうか? ご存知の方教えてください。よろしくお願いします。 Dim strTemp As String Dim Reader As New IO.StreamReader("C:\Windows\System32\eula.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) strTemp = Reader.ReadToEnd msgobox strTemp Reader.Close