見出し画像

C#初心者を卒業しよう(第1回の解答例)


プログラム

Program.cs

Console.WriteLine("Please input convert number.");
Console.WriteLine("1 : Convert meters to yards.");
Console.WriteLine("2 : Convert yards to meters.");
Console.WriteLine("3 : Convert meters to feet.");
Console.WriteLine("4 : Convert feet to meters.");
if (!int.TryParse(Console.ReadLine(), out var convert))
{
    throw new FormatException("Invalid input convert number.");
}
var distanceObject = DistanceFactory.Create(convert);

Console.WriteLine("Please input distance.");
if (!double.TryParse(Console.ReadLine(), out var distance))
{
    throw new FormatException("Invalid input distance.");
}
distanceObject.Calculate(distance);

var outputMessage = distanceObject.CreateAnswerMessage();
Console.WriteLine(outputMessage);

public interface IDistance
{
    void Calculate(double distance);
    string CreateAnswerMessage();
}

public class DistanceFactory
{
    public static IDistance Create(int convertNumber)
    {
        switch (convertNumber)
        {
            case 1:
                return new ToYards();
            case 2:
                return new ToMeters();
            case 3:
                return new MetersToFeet();
            case 4:
                return new FeetToMeters();
            default:
                throw new ArgumentOutOfRangeException(
                    $"{convertNumber} is out of range.");
        }
    }
}

public class ToYards : IDistance
{
    private double _yards;
    private double _meters;

    public void Calculate(double meters)
    {
        _meters = meters;
        _yards = meters * 1.0936133d;
    }

    public string CreateAnswerMessage()
    {
        return $"{_meters} meters is {_yards} yards.";
    }
}

public class ToMeters : IDistance
{
    private double _yards;
    private double _meters;

    public void Calculate(double yards)
    {
        _yards = yards;
        _meters = yards / 1.0936133d;
    }

    public string CreateAnswerMessage()
    {
        return $"{_yards} yards is {_meters} meters.";
    }
}

public class MetersToFeet : IDistance
{
    private double _feet;
    private double _meters;

    public void Calculate(double meters)
    {
        _meters = meters;
        _feet = meters / 0.3048d;
    }

    public string CreateAnswerMessage()
    {
        return $"{_meters} meters is {_feet} feet.";
    }
}

public class FeetToMeters : IDistance
{
    private double _feet;
    private double _meters;

    public void Calculate(double feet)
    {
        _feet = feet;
        _meters = feet * 0.3048d;
    }

    public string CreateAnswerMessage()
    {
        return $"{_feet} feet is {_meters} meters.";
    }
}

ダウンロード

解説

入力メッセージを追加

 ここは問題ありませんね。

Console.WriteLine("3 : Convert meters to feet.");
Console.WriteLine("4 : Convert feet to meters.");

オブジェクト生成を追加

 オブジェクト生成部分を追加します。ここが、今回のメインですね。

public class DistanceFactory
{
    public static IDistance Create(int convertNumber)
    {
        switch (convertNumber)
        {
            case 1:
                return new ToYards();
            case 2:
                return new ToMeters();
            case 3:
                return new MetersToFeet();
            case 4:
                return new FeetToMeters();
            default:
                throw new ArgumentOutOfRangeException(
                    $"{convertNumber} is out of range.");
        }
    }
}

変換クラスを追加

 メートルをフィートに変換するクラスを追加します。

public class MetersToFeet : IDistance
{
    private double _feet;
    private double _meters;

    public void Calculate(double meters)
    {
        _meters = meters;
        _feet = meters / 0.3048d;
    }

    public string CreateAnswerMessage()
    {
        return $"{_meters} meters is {_feet} feet.";
    }
}

 フィートをメートルに変換するクラスを追加します。

public class FeetToMeters : IDistance
{
    private double _feet;
    private double _meters;

    public void Calculate(double feet)
    {
        _feet = feet;
        _meters = feet * 0.3048d;
    }

    public string CreateAnswerMessage()
    {
        return $"{_feet} feet is {_meters} meters.";
    }
}


よろしければサポートをお願いします。 いただいたサポートは、書籍代、開発機器購入などに充てさせていただきます。