プロパティの作成練習問題

2023年1月26日

要件からコードを作成する練習です

問題1

C#で次の条件でコードを記述しなさい

Playerクラスを作ります
プロパティとして、int型のScoreを持ちます
コンストラクタで初期値が代入できます
もし、呼び出し元で、Scoreの値にマイナス値を代入される場合は、0を代入します

解答

解説

次のコードでPlayer クラスのインスタンスが生成され、その Score プロパティに初期値が代入されます。もし呼び出し元で、Score の値にマイナス値が代入された場合は、0が代入されます。 このプログラムを実行した結果、画面には “Player 1’s score: 50" と “Player 2’s score: 0" が表示されます

サンプルではコンストラクタでの初期値代入についてのチェックは省いています

.NET6以前(.NET6以降でも使えます)

using System;

class Player
{
    private int _score;
    public int Score
    {
        get { return _score; }
        set
        {
            if (value < 0)
            {
                _score = 0;
            }

            else
            {
                _score = value;
            }
        }
    }

    public Player(int score)
    {
        Score = score;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Player player1 = new Player(50);
        Console.WriteLine("Player 1's score: " + player1.Score);
        Player player2 = new Player(-10);
        Console.WriteLine("Player 2's score: " + player2.Score);
    }
}

結果の表示

Player 1's score: 50
Player 2's score: 0

.NET6以降の場合

次のようにトップレベルステートメントでの記述ができます
サンプルコードでは、さらに式本体(ラムダ記号)、三項演算子を使っています
使わなくても動作はします
理解している方で記述しましょう

Player player1 = new Player(50);
Console.WriteLine("Player 1's score: " + player1.Score);
Player player2 = new Player(-10);
Console.WriteLine("Player 2's score: " + player2.Score);

class Player
{
    private int _score;
    public int Score
    {
        get => _score;
        set => _score = value < 0 ? 0 : value;
    }

    public Player(int score)
    {
        Score = score;
    }
}

問題2

C#で次の条件でコードを記述しなさい

プレイヤークラスを作ります
プロパティとして、名前を持ちます
名前の長さが8文字以内しか登録できないようにしてください
また、それを試してみるコードも書いてください

解答

解説

このコードでは、新しいプレーヤー オブジェクトを作成し、その名前を「John Smith」に設定しています。この名前は8文字より長いため、"お名前は8文字以内でお願いします"というメッセージとともに例外がスローされます。次にこのコードでは、名前を8文字以下の “JohnS “に設定し、その名前をコンソールに出力しています。

.NET6以前(.NET6以降でも使えます)

class Player
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            if (value.Length <= 8)
                _name = value;
            else
                throw new Exception("お名前は8文字以内でお願いします");
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Player player = new Player();
        try
        {
            player.Name = "John Smith"; // これは例外をスローします
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        player.Name = "JohnS"; // これは例外をスローしません
        Console.WriteLine(player.Name);
    }
}

結果の表示

お名前は8文字以内でお願いします
JohnS

.NET6以降の場合

次のようにトップレベルステートメントでの記述ができます
サンプルコードでは、さらに式本体(ラムダ記号)、三項演算子を使っています
使わなくても動作はします
理解している方で記述しましょう

Player player = new Player();
try
{
    player.Name = "John Smith"; // これは例外をスローします
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
player.Name = "JohnS"; // これは例外をスローしません
Console.WriteLine(player.Name);

class Player
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            if (value.Length <= 8)
                _name = value;
            else
                throw new Exception("お名前は8文字以内でお願いします");
        }
    }
}

C#,学習,練習問題

Posted by hidepon