0

私は現在、abstractクラスとvirtual. 動物の名前、色、鳴き声を生成するシンプルなフォームを作成しました。カラー表示プロパティを除いて、すべてが正しく機能しているようです。結果は複数行のテキスト ボックスに表示されています。この形式ではなく色名のみで結果を表示する方法はありますColor [DarkGray]か?

ボタンがクリックされたときの結果:

Betty is a Color [DarkGray] horse with four legs and runs very fast that goes neigh! neigh!!

望ましい結果:

Betty is a Dark Gray horse with four legs and runs very fast that goes neigh! neigh!!

コード

namespace farm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public abstract class Animal
        {
            protected string the_name;
            protected string the_type;
            protected Color the_color;
            protected string features;

            public virtual string speaks()
            {
                return "";
            }

            public override string ToString()
            {
                string s = the_name + " is a " + the_color + " " + the_type + " with " + features + " that goes " + speaks();
                return s;
            }
        }

public class Horse : Animal
        {
            public Horse(string new_name, Color new_color)
            {
                the_name = new_name;
                the_color = new_color;
                the_type = "horse";
                features = "four legs and runs very fast";

            }

            public override string speaks()
            {
                return "neigh! neigh!!";
            }

        }

 private void button1_Click(object sender, EventArgs e)
        {

            Horse horse1 = new Horse("Topaz", Color.DarkGray);
            textBox1.AppendText(horse1.ToString());
        }
    }
}
4

2 に答える 2

2

はい、ToString メソッドで次を使用します。

the_color.Name

または、文字列に大文字が含まれる場所に空白を含む文字列が必要な場合、たとえば、DarkGray => Dark Gray のように拡張子を定義できます。

public static class ColorExtensions
{
    public static string GetColorString(this Color color)
    {
        StringBuilder sb = new StringBuilder();
        foreach(char c in color.Name.ToCharArray())
        {
            if (char.IsUpper(c))
                sb.Append(' ');

            sb.Append(c);
        }

        return sb.ToString();
    }
}

そしてそれをこのように呼びます

the_color.GetColorString()
于 2012-10-12T13:57:09.317 に答える
1

色のプロパティを使用してName、人間が読める名前を取得できます。

string s = the_name + " is a " + the_color.Name + " " + the_type + " with " + features + " that goes " + speaks(); 
return s;

多くの場合、MSDN で名前空間を検索し、使用可能なメソッドとプロパティを調べると役立ちます。この場合、MSDN のColor Structureを確認すると、[プロパティ] セクションにColor.Nameのプロパティが見つかります。

このメソッドは、色が名前から作成された場合は色のユーザー定義名、または既知の色の名前のいずれかを返します。カスタム カラーの場合、RGB 値が返されます。

于 2012-10-12T13:57:22.753 に答える