なのログ

だから見てて下さい・・・俺の・・・変身

C#復習篇 vol.4

ヘイヘイ4回目ですよやっていきますよ。

一週間C#

Day6

オブジェクト指向

クラスとかどうとかじゃなくて、
いきなり「オブジェクト指向」たる副題でした。

まあクラスってそのための機能・・・なんかな・・・?
(歴史的なこととかがまるでわかってない顔)

で。
f:id:nanoyatsu:20181001195840p:plain

初手から一瞬で見事に信用を落としにくるのやめて欲しい・・・。
(どうやらjavaのコースもあるみたいで、そういうことですね)

まああまり深く考えずに進みましょう。
5000万回見た感じの車の例とかも上がりつつ、とりあえずコード。

クラス(Sample601)
//Character.cs
namespace CSharpLearn_04
{
    class Character
    {
        public string name = "";
        public int appearancePart = 0;
        //public string voiceActor = "";
        //public string style = "";
        //public string phrase = "";
        public void showNameAndPart() {
            Console.WriteLine("第{1}部:{0}",appearancePart,name);
        }
        public void setNameAndPart(string name,int appearancePart) {
            this.name = name;
            this.appearancePart = appearancePart;
        }
    }
}
//Program.cs
namespace CSharpLearn_04
{
    class Program
    {
        static void Main(string[] args) {
            var c1 = new Character();
            var c2 = new Character();
            c1.name = "ジョナサン・ジョースター";
            c1.appearancePart = 1;
            c2.setNameAndPart("ジョセフ・ジョースター", 2);

            c1.showNameAndPart();
            c2.showNameAndPart();
        }
    }
}

とりあえずサンプルと互換っぽいコードを起こすなのやつ氏。
(参考: ジョジョの奇妙な冒険 アイズオブヘブン | キャラクター )

戻値、オーバーロード
    class Calc
    {
        //  二つの整数の引数の和を求める
        public int Add(int a,int b){
            return a + b;
        }
        //  三つの整数の引数の和を求める
        public int Add(int a, int b, int c)
        {
            return a + b + c;
        }
    }

戻値がココに来て初めて出てくるのか・・・となりつつ。
あと↑のサンプルは手を抜いてコピペしてしまったんですが、
{←これの位置が不揃いでビビりますね。大丈夫だろうかこのコース・・・(今更)

でまあ、演習です。
(と思ったら演習のリンクが5日目のやつだったり正直さっきのサンプルの上にも「配列変数は~」とか書き出しがあったりしてマジで大丈夫じゃないやつだぞこのコース・・・)

Day6 演習

まさかの全3問でした。やっていきましょう。

    class Program
    {
        static void Main(string[] args) {
            prob601();
            prob602();
            prob603();
        }
        static void prob601() {
            int a = 4, b = 2, c = 8;

            Console.WriteLine("{0},{1},{2}の内の最大値:{3}", a, b, c, MinMax.Max(a, b, c));
            Console.WriteLine("{0},{1},{2}の内の最小値:{3}", a, b, c, MinMax.Min(a, b, c));
        }
        static void prob602() {
            double a = 4.1, b = 2.3;

            Console.WriteLine("{0} * {1} = {2}", a, b, Calc.Mul(a, b));
            Console.WriteLine("{0} / {1} = {2}", a, b, Calc.Div(a, b));
        }
        static void prob603() {
            var en = new Circle(4.0);

            Console.WriteLine("半径{0}の円周:{1}", en.r, en.circumference());
            Console.WriteLine("半径{0}の面積:{1}", en.r, en.area());
        }
    }
    class MinMax
    {
        public static int Max(int n1, int n2) {
            return (n1 > n2) ? n1 : n2;
        }
        public static int Max(int n1, int n2, int n3) {
            return Max(Max(n1, n2), n3);
        }
        public static int Min(int n1, int n2) {
            return (n1 < n2) ? n1 : n2;
        }
        public static int Min(int n1, int n2, int n3) {
            return Min(Min(n1, n2), n3);
        }
    }
    class Calc
    {
        public static double Mul(double n1,double n2) {
            return n1 * n2;
        }
        public static double Div(double n1,double n2) {
            return n1 / n2;
        }
    }
    class Circle {
        public double r;
        public Circle(double r) {
            this.r = r;
        }
        public double circumference() {
            return 2 * 3.14 * r;
        }
        public double area() {
            return 3.14 * r * r;
        }
    }

ほい。次行きましょう。

Day7

~アクセス指定子、プロパティ~

staticが好きです!!(はい)
(それはアクセス指定子とはまた少し違うよなのやつ君)

アクセス指定子
    class Character
    {
        private string Name { get; set; } = "";
        private int AppearancePart { get; set; } = 0;
        public Character(string name,int appearancePart) {
            this.Name = name;
            this.AppearancePart = appearancePart;
        }
        public void ShowNameAndPart() {
            Console.WriteLine("第{0}部:{1}",AppearancePart,Name);
        }
    }

変数がprivateになりました。んでコンストラクタ用に。

アクセス修飾子は他にもいくつか。
ぶっちゃけprivate,public以外全然使い慣れていません。
書き出しました。↓

  • public
    どこからでもアクセス可能
  • protected
    クラス内部と、派生クラスの内部からのみアクセス可能
  • internal
    同一プロジェクト内のクラスからのみアクセス可能
  • protected internal
    同一プロジェクト内のクラス内部、
    または、派生クラスの内部からのみアクセス可能
  • private protected
    (C# 7.2 以降)同一プロジェクト内のクラス内部、
    かつ、派生クラスの内部からのみアクセス可能
  • private
    クラス内部からのみアクセス可能

(ちょっと足りなかったのでufcppから引用)

プロパティ

アッさっきの例に含んでしまった・・・。

        private string Name { get; set; } = "";
        private int AppearancePart { get; set; } = 0;

このへんです。

では以上。

Day7 演習

3問でした。やりましょう。

    class Program
    {
        static void Main(string[] args) {
            Prob701();
            Prob702();
            Prob703();
        }
        static void Prob701() {
            Data d = new Data();
            d.Number = 100;
            d.Comment = "Programming C#";
            Console.WriteLine("number = " + d.Number);
            Console.WriteLine("comment = " + d.Comment);
        }
        static void Prob702() {
            TwoStrings s = new TwoStrings();
            s.String1 = "Hello";
            s.String2 = "World";
            Console.WriteLine("一つ目の文字列は" + s.String1);
            Console.WriteLine("二つ目の文字列は" + s.String2);
            Console.WriteLine("二つの文字列を合成したものは" + s.GetConnectedString());
        }
        static void Prob703() {
            Calculation c = new Calculation();
            c.Number1 = 8;    //  一つ目の数をセット
            c.Number2 = 9;    //  二つ目の数をセット
            //  二つの数の和を表示
            Console.WriteLine("{0} + {1} = {2}", c.Number1, c.Number2, c.Add());
            //  二つの数の差を表示
            Console.WriteLine("{0} - {1} = {2}", c.Number1, c.Number2, c.Sub());
        }
    }
    class Data
    {
        public int Number { get; set; } = 0;
        public string Comment { get; set; } = "";
    }
    class TwoStrings
    {
        public string String1 { get; set; } = "";
        public string String2 { get; set; } = "";
        public string GetConnectedString() {
            return String1 + String2;
        }
    }
    class Calculation
    {
        public int Number1 { get; set; } = 0;
        public int Number2 { get; set; } = 0;

        public int Add() {
            return Number1 + Number2;
        }
        public int Sub() {
            return Number1 - Number2;
        }
    }

おわり!


・・・といったところでなんですけど。

アクセス修飾子らへんのところでですね、
ちょっとプロパティ全部書くの面倒だなと思って、
自動プロパティの文法を確認しに行ったんですよね。ufcppに。

そしたら。

これが今回の一週間でナントカ f:id:nanoyatsu:20181001222949p:plain

これがufcpp f:id:nanoyatsu:20181001223115p:plain

ちょっとこれはもうしんどいかなあ・・・

いや本当に嫌なものに気付いたな・・・と思ってきつい。
念の為出てくるフレーズで検索したりしたんですが、
ここに値の変更時の処理を書くで検索したときに
岩永さん(ufcppの人)のC#書籍のGoogleブック検索結果が出てくるくらいでした。

折角このチュートリアルコースでド初歩からやってきた所でアレなんですが、
アクセスしたくなくなってしまった・・・このページに・・・。

・・・というわけで、この7日目で一旦区切りつつ、
追加編の7日分の名前をもってきました。

  1. コンストラクタほか
  2. 静的メンバ
  3. 継承
  4. 抽象クラス
  5. インターフェース
  6. コレクション
  7. デリゲート・例外

で、確認したらufcppにも対応したページ名がありますね。
残りはそっちでやっていこうと思います。

では今回はおわりっです!