開発環境
- Microsoft Windows 8 Pro 64bit 日本語 (OS)
- Microsoft Visual Studio Express 2012 for Windows Desktop (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 ConvertToVB(string str); } interface ICodeChecker : IConvertible { bool CodeCheckSyntax(string str, string lang); } class ProgramConverter : IConvertible { public ProgramConverter() { Console.WriteLine("ProgramConverteを作成"); } #region IConvertible public string ConvertToCSharp(string str) { return "文字列をC#の文字列に変換中・・・"; } public string ConvertToVB(string str) { return "文字列をVisual Basicの文字列に変換中・・・"; } #endregion } class ProgramHelper : ProgramConverter, ICodeChecker { public ProgramHelper() { Console.WriteLine("ProgramHelperを作成"); } #region ICodeCheck public bool CodeCheckSyntax(string str, string lang) { switch (lang) { case "C#": return true; case "Visual Basic": return true; default: return false; } } #endregion } class Tester { public void Run() { ProgramConverter pc = new ProgramConverter(); ProgramHelper ph = new ProgramHelper(); Object[] objs = { pc, ph }; string str = "文字列"; string cs = "C#"; string vb = "Visual Basic"; string js = "JavaScript"; string py = "Python"; string[] langs = { cs, vb, js, py }; foreach (object obj in objs) { if (obj is IConvertible) { IConvertible ic = (IConvertible)obj; Console.WriteLine(ic.ConvertToCSharp(str)); Console.WriteLine(ic.ConvertToVB(str)); } else { Console.WriteLine("IConvertibleをサポートしていない。"); } IConvertible ic1 = obj as IConvertible; if (ic1 != null) { Console.WriteLine(ic1.ConvertToCSharp(str)); Console.WriteLine(ic1.ConvertToVB(str)); } else { Console.WriteLine("IConvertibleをサポートしていない。"); } if (obj is ICodeChecker) { ICodeChecker ccs = (ICodeChecker)obj; Console.WriteLine("構文チェック"); foreach (string lang in langs) { Console.WriteLine(ccs.CodeCheckSyntax(str, lang)); } } else { Console.WriteLine("ICodeCheckerをサーポートしていない。"); } ICodeChecker ccs1 = obj as ICodeChecker; if (ccs1 != null) { Console.WriteLine("構文チェック"); foreach (string lang in langs) { Console.WriteLine(ccs1.CodeCheckSyntax(str, lang)); } } else { Console.WriteLine("ICodeCheckerをサーポートしていない。"); } } } static void Main() { Tester t = new Tester(); t.Run(); } }
入出力結果(Console Window)
ProgramConverteを作成 ProgramConverteを作成 ProgramHelperを作成 文字列をC#の文字列に変換中・・・ 文字列をVisual Basicの文字列に変換中・・・ 文字列をC#の文字列に変換中・・・ 文字列をVisual Basicの文字列に変換中・・・ ICodeCheckerをサーポートしていない。 ICodeCheckerをサーポートしていない。 文字列をC#の文字列に変換中・・・ 文字列をVisual Basicの文字列に変換中・・・ 文字列をC#の文字列に変換中・・・ 文字列をVisual Basicの文字列に変換中・・・ 構文チェック True True False False 構文チェック True True False False 続行するには何かキーを押してください . . .
0 コメント:
コメントを投稿