自分磨きのITノート

プログラミング(C#、VB.NET)言語やデータベースの役立つ情報を初心者から中級者向けに発信します。

プログラミング入門

VBのIsNumeric関数は許容範囲が広いので注意必要[VB.Net,C#]

皆さんはいつもプログラミングで数値チェックをどのようにされていますか?

VBで数値チェックといえば、IsNumeric関数が有名ですが、単純にこれだけでは不十分なことが多く、意図しない不具合発生することもあります。
プログラミングでは、値のチェックはアプリケーションが正常に動作を続ける上で非常な重要な部分です。

.Netだと、Double.TryParseメソッド正規表現でチェックをされているのだと思います。しかし、私個人的な問題なのですが、正規表現は複雑になるとぱっと見わからなくなってきて体が受付ません^^;なので、IsNumeric後などにゴリゴリチェックロジックを書いています(という記事です)。

VB.NetだとMicrosoft.VisualBasic名前空間にあるIsNumericメソッドはつい便利なので使用してしまいがちです。単純にIsNumericだけのチェックで終わってはないでしょうか??

IsNumericの引数に
  • IsNumeric("123")の大文字
  • IsNumeric("10e3")の桁を表す文字
  • IsNumeric("&H12")の16進数を表す文字
も、Trueとして返ってきます。

これだと、その数値をそのままデータベースの決まったサイズに入れたりすると、エラーが発生することがあります。大文字だとコード体系のフィールドにしたい場合使えません。
やはり、IsNumeric関数(TryParseも同じ)の後に数字の範囲チェックや文字列チェックなどは欠かせないですね(>o<)

これがよい策かわかりませんが、私がよく使っている数値文字列チェックのロジックを晒しておきます。最後にC#バージョンあり。

数値文字列チェック

続きを読む

C#入門-Taskを使った非同期(マルチスレッド)プログラミングまとめ

今回は、C#で非同期プログラミングを作っていきたいと思います。

最近ではあまり見かけませんが、.Netで「スレッド」と検索すると検索結果にThreadクラスを使ったサンプルソースコードに出会うことがあります。しかし、Threadクラスは、.Net初期のバージョンからあるスレッドの記述方法です。.Net4.0以上のバージョンである場合、Taskクラスを使ったほうがオブジェクトの起動速度や今どきのプロセッサを効率よく使用できます。

Taskクラスは、あくまで1つの仕事(アクション)を定義するものにすぎません。しかし、マルチスレッド(非同期)として動作させることができるので、よく考えてプログラミングする必要があります。

C#言語はプログラマーに分かりやすくマルチスレッドを使用してもらうために進化してきたプログラミング言語です。まだまだ進化は続くと思います。
私もまだまだTaskについては学習中ですので、共に勉強出来ればと思います。

今では色々なサイトでTaskのサンプルソースを手に入れることが出来ます。しかし情報量が多く、簡単なサンプルが少なかったりします。そこで、なるべく簡単な説明でまとめてみました。


簡単なTaskクラスの例

続きを読む

Windowsプログラミング入門 - 初めてのWindowsフォームアプリケーション

前回、Visual Studioをインストールしました。今回は、Windowsのデスクトップ上で動作する.NETアプリケーション-Windowsフォームの作り方を紹介します。また、プロジェクトを開始すると出来上がるひな形(テンプレート)ファイルの説明も簡単します。
※ 全くWindowsアプリケーションを作成したことのない方への記事となります。
※ VisualStudio2017で説明しています。

プロジェクト作成(ソリューション作成)

(1)Visual Studioを立ち上げ、[ファイル]-[新規作成]-[プロジェクト]を選択。 180210_1_newproject

(2)言語-[Windows クラッシックデスクトップ]-[Windows フォームアプリケーション]を選択。各項目を入力して「OK」ボタンを押します。
※ 言語はVisual Basicでも構いません。
180210_2_selectwindowsform

アプリケーションの名前やプログラムソースの保管先を選択することが出来ます。
他には.Net Frameworkのバージョンも選択できます。(今回は.Net 4.6.1)


Windowsフォームひな形(テンプレート)ファイルの説明

続きを読む

目的別で選ぶオススメ入門プログラミング言語

プログラミング言語を勉強をするぞ!と決めても、目的がなかったら何から勉強していけばいいのかわかりません。モチベーションが上がらない状態だと、プログラミングの勉強は途中で挫折してしまうのがオチです。

初めてプログラミングを学ぼうとしている方なら、なおさらどの言語を使ったらよいのか分からなかったりもします。そこで目的別形式でどの言語がオススメなのか紹介していきます。

私の主観によるものが大半なので、参考程度に読んで下されば幸いです。
また、人気が高かったり、就職に有利なプログラミング言語を優先してますので、あしからず。

続きを読む

C#でプログラミング入門 - クラスの継承

前回は、クラスの基礎を行いました。今回は、クラスの継承です。

構造体までは、すんなり頭に入ったかもしれませんが、このへんから具体的に想像がしにくく、頭が混乱するかもしれません。ソフトウェアの学習は、パズルとパズルが繋がることで初めて「そういうことか!」と、気づくことがあります。
プログラミング入門時は、とりあえず色々やってまて、動きを知ることが習得の早道だと私は思っています。

クラスの継承とは、親クラス(ベースクラス、スーパークラス)の機能を受け継いだ子クラスを作ることができます。子クラスは、親クラスの変数・プロパティ・メソッドなどを引き継いでくれるため、同じコードを書かなくても済み、生産性が上がったりクラスのメンテナンスが容易になるなどのメリットがあります。

ここに来るまでに変数やオブジェクトを使ってみて最初から色々なメソッドが使えるから不思議に思われた方もいらっしゃるでしょう。クラスや構造体・列挙体は定義した時点でSystem.Objectクラスが継承されています。その為、ToStringやEqualsメソッドなどがいきなり使えたりします。

では、サンプルソースで継承の説明していきます。

C#

class Program
{
    /// 果物クラス
    public class Fruit
    {
        // ▼非公開メンバー変数
        private string m_name;
        // ▼継承クラスからはアクセス可能なメソッド
        protected int Tanka;
        // ▼どこからでもアクセスできるプロパティ
        public string Name { get { return this.m_name; } set { this.m_name = value; } }
        // ▼継承可能なメソッド
        public virtual string getSyurui()
        {
            return "なし";
        }
        // ▼親クラスのメソッド
        public decimal getKakaku(int kosu)
        {
            return (kosu * this.Tanka);
        }
        // ▼ Objectのメソッドをオーバーライド
        public override string ToString()
        {
            return string.Format("<<< 種類:{1}、果物の名前:{0} >>>", this.getSyurui(), this.Name);
        }

    }
    public class Apple : Fruit
    {
        // 子クラスのコンストラクタ
        public Apple(string name, int tanka)
        {
            this.Name = name;
            this.Tanka = tanka;
        }
        // 親クラスのメソッドをオーバーライド
        public override string getSyurui()
        {
            return "リンゴ";
        }
    }
    // エントリポイント
    static void Main(string[] args)
    {
        Apple a1 = new Apple("あまいリンゴ", 86);
        Apple a2 = new Apple("おいしいリンゴ", 105);
        OutMessage(a1);
        OutMessage(a2);
        Console.ReadLine();
    }
    // 出力メソッド
    static void OutMessage(Apple a)
    {
        Console.WriteLine(a.ToString());
        Console.WriteLine(a.Name + "は、10個でいくらですか?");
        Console.WriteLine("{0}円です。", a.getKakaku(10));
    }
}

出力結果

<<< 種類:あまいリンゴ、果物の名前:リンゴ >>>
あまいリンゴは、10個でいくらですか?
860円です。
<<< 種類:おいしいリンゴ、果物の名前:リンゴ >>>
おいしいリンゴは、10個でいくらですか?
1050円です。

Fruitという基底クラスを定義し、それを継承してるAppleクラスを作成しました。
Fruitクラスのメンバー変数m_nameは、privateなのでAppleクラスからアクセス(取得したり代入したり)できません。protected にしたTanka変数には、継承したクラスからアクセスが可能です。

FruitのgetSyuruiメソッド(関数)ですが、virtual修飾子がついています。これは、子クラスからこのメソッドの処理を置き換えて実装できるように宣言してあります。子クラスのAppleは、overrideをつけgetSyuruiメソッドの動作を実装しています。

もう一つのgetKakakuメソッドは、Appleクラスに何も記述しなくても、Appleクラスのインスタンス(実態)から呼び出しが可能となります。

FruitクラスもObjectクラスから継承されているので、virtualのToStringメソッドをオーバーライド(override)することができます。

Mainメソッドでは、2つのAppleクラスのインスタンスを作って結果を出力しています。
注目して頂きたいところが2つあります。
1つ目は、OutMessageメソッド内で、親クラスのオーバーライドされたToStringです。getSyuruiメソッドが子クラスでオーバーライドした側が呼ばれているところです。
2つ目のgetKakakuメソッドも親クラスのメソッドを使って計算していることも確認できました。

小走りに色々と説明していきましたが、オブジェクト指向プログラミングは奥が深いので、今後もクラスなどについて書いていければと思います。

スポンサードリンク
自己紹介
【管理人】
なみやん
【コメント】
プログラムを組むことが大好きな30代男性。IT系の仕事を10年ちょいやっています。このブログを通して知識を人に伝えることによって、自分をさらに磨こうと精進しています。応援よろしくお願いします。
免責事項
当サイトで紹介しているサンプルソースコードは自由に使用いただいても結構が、自己責任でお使いください。また、記事の内容が主観的であったり、努力していますが正しくなかったりする場合がございます。読者本人の判断にお任せいたします。