自分磨きのITノート

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

プログラミング入門

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メソッドも親クラスのメソッドを使って計算していることも確認できました。

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

C#でプログラミング入門 - クラスとは

前回は、構造体を説明しました。今回は、いよいよクラスです。

今、殆どのプログラミング言語(C#以外)でもクラスを使ってプログラミングが出来ます。
ここ十数年、長く使われ続けているクラスは、プログラミングを行う上で重要な存在です。

クラスは、抽象化した構造を作るのに向いています。モノを作るために必要な設計図みたいなものです。例えば、車のベースの設計図があるとしたら、それから様々な車種の設計図を派生して作れるようなものに近いです。設計図(クラス)から実物になったものをオブジェクトインスタンスと呼んだりします。

クラスの利用は、変数や関数をグループ化して独自の型を作成できます。

Windows上で役に立つツールを手軽に作りたい!となると、.Net Frameworkを利用することになります。.Netは、Windowsを操作するDLL(API)をラップしたクラスがたくさんあります。それにはある程度クラスは避けて通れません。しかし、最初からすべて理解することは難しいと思います。でも、「なんちゃってプログラム」でも構文エラーにならなければ動いてしまいます(^∀^)

最初は、いろいろクラスに触れながら「どう動く」を理解していけばよいのです。
以下、クラスの代表的な3つの機能を紹介していきます。

・カプセル化(隠ぺい化)

内部の動きを隠すことができる。⇒利用者は、やりたいことの関数を呼べば、内部の動きを気にする必要がない。
外部から内部変数の直接な変更をできないようにして、主コードと分離ができる。⇒汎用性が高くなる。

・継承

親(基底クラス)の属性/関数/イベントを受け継いだ子(継承クラス)が作れる。

・多態性

基底クラスのオブジェクトに継承したクラスのオブジェクトを代入し、振る舞いを変化させる「ポリモーフィズム(多態性)」が使える。

他にも、クラスにはたくさんの機能があります。何ページにもなる本があるくらいですから。
オブジェクト指向(クラス及び構造体)プログラミングは、追々進めていきましょう。

クラスの構文から見ていきましょう。

クラスの構造

アクセス修飾子 Class クラス名 {
  内部変数
 イベント定義  プロパティ定義  メソッド定義etc }

クラスの利用方法


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