開発環境
- 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; interface IConvertible { string ConvertToCSharp(string str); string ConvertToVisualBasic(string str); } interface ICodeChecker : IConvertible { bool CodeCheckSyntax(string str, string lang); } class ProgramConverter : IConvertible { public ProgramConverter() { Console.WriteLine("ProgramConverter"); } public string ConvertToCSharp(string str) { return str + "をC#の文字列に変換中・・・"; } public string ConvertToVisualBasic(string str) { return str + "をVisual Basicの文字列に変換中・・・"; } } class ProgramHelper : ProgramConverter, ICodeChecker { public ProgramHelper() { Console.WriteLine("ProgramHelper"); } public bool CodeCheckSyntax(string str, string lang) { switch (lang) { case "C#": return true; case "Visual Basic": return true; default: return false; } } } class Tester { public void DisplayConvertible(ProgramConverter pc, string str) { Console.WriteLine(pc.ConvertToCSharp(str)); Console.WriteLine(pc.ConvertToVisualBasic(str)); } public void DisplayCodecheckSyntax(ProgramHelper ph, string str, string lang) { Console.WriteLine("{0}: {1}", lang, ph.CodeCheckSyntax(str, lang)); } 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 py = "Python"; string pl = "Perl"; string rb = "Ruby"; string c = "C"; string php = "PHP"; string[] langs = { cs, vb, js, py, pl, rb, c, php }; foreach (ProgramConverter p in pcs) { if (p is IConvertible) { DisplayConvertible(p, str); } else { Console.WriteLine("インタフェースIConvertibleを実装していない。"); } IConvertible ic = p as IConvertible; if (ic != null) { DisplayConvertible(p, str); } else { Console.WriteLine("インタフェースIConvertibleを実装していない。"); } if (p is ICodeChecker) { ph = (ProgramHelper)p; foreach (string lang in langs) { DisplayCodecheckSyntax(ph, str, lang); } } else { Console.WriteLine("インタフェースICodeCheckerを実装していない。"); } ICodeChecker icc = p as ICodeChecker; if (icc != null) { ph = (ProgramHelper)p; foreach (string lang in langs) { DisplayCodecheckSyntax(ph, str, lang); } } else { Console.WriteLine("インタフェースICodeCheckerを実装していない。"); } } } static void Main() { Tester t = new Tester(); t.Run(); } }
入出力結果(Console Window)
ProgramConverter ProgramConverter ProgramHelper 文字列をC#の文字列に変換中・・・ 文字列をVisual Basicの文字列に変換中・・・ 文字列をC#の文字列に変換中・・・ 文字列をVisual Basicの文字列に変換中・・・ インタフェースICodeCheckerを実装していない。 インタフェースICodeCheckerを実装していない。 文字列をC#の文字列に変換中・・・ 文字列をVisual Basicの文字列に変換中・・・ 文字列をC#の文字列に変換中・・・ 文字列をVisual Basicの文字列に変換中・・・ C#: True Visual Basic: True JavaScript: False Python: False Perl: False Ruby: False C: False PHP: False C#: True Visual Basic: True JavaScript: False Python: False Perl: False Ruby: False C: False PHP: False 続行するには何かキーを押してください . . .
0 コメント:
コメントを投稿