C# プロパティ

C# プロパティ

クラス内で、変数を定義して、その変数を、クラス内外からアクセスするもの。

クラスの外から見ると、メンバ変数っぽくて、
クラスの内から見ると、メソッドっぽく見える物。

変数をそのまま触らせるより、プロパティ経由で触らせる方が、デバックにもカスタムにも変更にも便利になるものです。
例えば、以下のような変数を利用するときに、追加でプロパティも宣言します。

        // 変数宣言
        string name;
        int age;

プロパティの宣言

        // プロパティ
        public string Name
        {
            set { name = value; }
        }
        public int Age
        {
            set { age = value; }
        }

プロパティと宣言の両方ってめんどくさくない?
ではなくて、プロパティがあっても、直接変数を変更されないように、変数宣言を省略してプロパティのみの記述をすることも出来ます。

        // プロパティ
        public string Name
        {
            get;  set;
        }
        public int Age
        {
            get;  set;
        }

初期化することも可能です

        // プロパティ
        public string Name { get;  set; } = "None";
        public int Age { get;  set; } = 0;

あと、プロパティは、変数がなくても宣言は出来ます。

        // プロパティ
        public string Name
        {
            get { return "None"; }
        }

変数がなくても宣言できる2つ目の例:
固定文字を返す プロパティ 例です。

public string NameAndAge => "Name:" + Name + ", age:" + Age;

プロパティで、変数宣言しないケースで、読み取り専用にするには、private を指定すればいいみたい。

        // プロパティ
        public string Name
        {
            get;  private set;
        }

C# コンストラクタ宣言 引数有り無し 宣言

C# コンストラクタ宣言 引数有り無し 宣言

コンストラクタは、引数無でも、引数有でも宣言することが可能です。

  // 引数無し
        public Person()
        {
                type = "人";
        }

  // 引数有り
        public Person(string type)
        {
                ;
        }

ただ、状況によっては、引数有り無しで2つのコンストラクタの内容を複数回書かない方法として、以下のように書くことが出来ます。

  // 引数無し
        public Person(): this("人") { }
  // 引数有り
        public Person(string type)
        {
                ;
        }

もしくは、以下のようにな記載もできます。

        public Person(string name = "test", int age=0)
        {
                ;
        }

C# クラス宣言

C# クラス宣言

クラス宣言は、クラス名を指定して作成することが出来ます。

class <クラス名>

これは基底クラスと呼ぶらしい。
クラス名は、先頭位置文字を大文字にするルールっぽいです。

クラスには、変数や関数を記述できます。

クラスでは、特別な関数が1つあり、それをコンストラクタと呼びます。
コンストラクタとは
 クラスを宣言した時に、初期化などが出来ます。

        public Person()
        {
                ;
        }

コンストラクタは、クラス名と同じ名前になります。

コンストラクタは、引数無でも、引数有でも宣言することが可能です。

  // 引数無し
        public Person()
        {
                ;
        }

  // 引数有り
        public Person(string name, int age)
        {
                ;
        }

ここまでの内容を踏まえた例文を以下に記載しておきます。

namespace ClassTest001
{
    class Person // 基底クラス
    {
        // 変数宣言
        string name;
        int age;

        /// <summary>
        /// 基底クラスのコンストラクタ(引数有)
        /// </summary>
        /// <param name="name"></param>
        /// <param name="age"></param>
        public Person(string name, int age)
        {
            this.name = name;
            this.age = age;
            Console.WriteLine("基底クラス(引数有)");
            Console.WriteLine($"Name: {name}, Sge: {age}");
        }
    }
}

いろいろなサンプルを見ていると、名簿的な名前や年齢とかのものを見かけるので、それを参考にしています。

Xamarinで戻るボタンで画面を戻してみました。

戻るボタン機能

先日Xamarinで、Main画面とSetup画面を作りましたが、

Setup画面で、戻るボタンを押して、

Main画面に戻るようにしました。

f:id:k_sharp:20200814231333p:plain

戻る機能

Setup画面側のxaml.csファイルで、

戻るボタンが押されたら発生するイベントを上書きして、

MainPageに切り替える処理を追加すればできました。

 

コード

Protected override bool OnBackButtonPressed()

{

 App.Curresnt.MainPate = new MainPage()

return true;

}

 

作業Log


#007 戻るを設定(Xamarin)

 

XamarinでForm画面を追加してみました。

新しい画面を追加

Setupボタンを押したときに、

新しい画面を開くように、

Form(?)画面を追加しました。

 

追加方法

 ソリューションエクスプローラー画面にあるプロジェクトを選択し

右クリックでメニューを出して、

追加(D) -> 新しい項目(W)... を選択します。

 

そうすると、[新しい項目の追加] という画面が表示されるので、

そこから、[コンテンツページ]を選択します。

 

 Page1.xaml.cs / Page1.xaml が追加されます。

 

前回作成したSetupボタンを押したときにCall

B_Clicked()内に、処理を追加します。

 

ここは、どのボタンを押しても呼ばれるので、

Setupボタンが押された時だけ処理されるようにするため、

以下の判定を追加しました。

if(sx.Tag.ToString() == "0") {}

 

その中に、先ほど追加した画面が開くように

今回はMainPageを入れ替えるという荒業で対応しました。

Application.Current.MainPage = Page1();

 

f:id:k_sharp:20200813193848p:plain

 

作業過程


#006 Xamarin Setup用のForm作成