2012年6月13日水曜日

開発環境

  • Microsoft Windows 7 Home Premium (OS)
  • Microsoft Visual C# 2010 Express Edition (IDE)
  • 言語: C#

『初めてのC# 第2版』(Jesse Liberty+Brian MacDonald著、日向俊二訳、オライリー・ジャパン、2006年、ISBN978-487311-294-7)の 第13章(インタフェース)13.10(練習問題)、練習13-4を解いてみる。

練習13-4.

コード

using System;

namespace Sample
{
    public interface IConvertible
    {
        string ConvertToCSharp(string str);
        string ConvertToVisualBasic(string str);
    }
    public interface ICodeChecker
    {
        bool CodeCheckSyntax(string str, string lang);
    }
    public class ProgramConverter : IConvertible
    {
        #region IConvertible
        public string ConvertToCSharp(string str)
        {
            return "C#の文字列に変換中・・・";
        }
        public string ConvertToVisualBasic(string lang)
        {
            return "Visual Basicの文字列に変換中・・・";
        }
        #endregion
    }
    public class ProgramHelper : ProgramConverter, ICodeChecker
    {

        #region ICodeChecker
        public bool CodeCheckSyntax(string str, string lang)
        {
            switch (lang)
            {
                case "C#":
                case "Visual Basic": return true;
                default:
                    return false;
            }
        }
        #endregion
    }
    class Tester
    {
        public void Run()
        {
            ProgramConverter pc = new ProgramConverter();
            ProgramHelper ph = new ProgramHelper();
            ProgramConverter[] pcs = { pc, ph };
            string str = "文字列";
            string cs = "C#";
            string vb = "Visual Basic";
            string js = "JavaScript";
            string[] langs = { cs, vb, js };
            foreach (string lang in langs)
            {
                Console.WriteLine(lang);
                foreach (ProgramConverter c in pcs)
                {
                    IConvertible convertible = c as IConvertible;
                    if (convertible != null)
                    {
                        Console.WriteLine(convertible.ConvertToCSharp(str));
                        Console.WriteLine(convertible.ConvertToVisualBasic(str));
                    }
                    else
                    {
                        Console.WriteLine("IConvertibleインタフェースを実装していません。");
                    }
                    ICodeChecker codechecker = c as ICodeChecker;
                    if (codechecker != null)
                    {
                        if (codechecker.CodeCheckSyntax(str, lang))
                        {
                            Console.WriteLine("構文チェック中・・・");
                        }
                        else
                        {
                            Console.WriteLine("構文チェック不可");
                        }
                    }
                    else
                    {
                        Console.WriteLine("ICodecheckerインタフェースを実装していません。");
                    }
                }
            }
        }
        static void Main()
        {
            Tester t = new Tester();
            t.Run();
        }
    }
}

入出力結果(Console Window)

C#
C#の文字列に変換中・・・
Visual Basicの文字列に変換中・・・
ICodecheckerインタフェースを実装していません。
C#の文字列に変換中・・・
Visual Basicの文字列に変換中・・・
構文チェック中・・・
Visual Basic
C#の文字列に変換中・・・
Visual Basicの文字列に変換中・・・
ICodecheckerインタフェースを実装していません。
C#の文字列に変換中・・・
Visual Basicの文字列に変換中・・・
構文チェック中・・・
JavaScript
C#の文字列に変換中・・・
Visual Basicの文字列に変換中・・・
ICodecheckerインタフェースを実装していません。
C#の文字列に変換中・・・
Visual Basicの文字列に変換中・・・
構文チェック不可
続行するには何かキーを押してください . . .

0 コメント:

コメントを投稿