Здравствуйте, господа.
Как новичок в C# и .NET я вчера спросил на stackoverflow (http://stackoverflow.com/questions/2192808/simple-but-interesting-task-for-c-newbie) о предложениях тестовых заданий для новичков. В результате получил ряд ответов, интересных и не очень. Но среди них выгодно выделялся один, с предложением решить программерский quiz.
Цель головоломки — с помощью доступных классов (код 1) вывести фразу, которую я поместил в топик этой публикации. Для тех, кто захочет почитать пост в оригинале — ссылку на сам вопрос я дал выше, искомый ответ там помечен как accepted. Для всех остальных же непосредственно задание вот:
Автором этого ответа предлагается реализовать сам код внутри
PS: сам ещё не решал (но мысли определённые есть, конечно же), поэтому, более опытные товарищи, особо в комментариях спойлеры не оставляйте :-)
Всем спасибо и удачи в решении :-)
UPD 1: исправил в соответствии с первым комментарием, однако я не совсем уверен, что условиями задачи запрещается создание новых классов + наследование. и не уверен, что задача решается без этого. естественно могу ошибаться.
Как новичок в C# и .NET я вчера спросил на stackoverflow (http://stackoverflow.com/questions/2192808/simple-but-interesting-task-for-c-newbie) о предложениях тестовых заданий для новичков. В результате получил ряд ответов, интересных и не очень. Но среди них выгодно выделялся один, с предложением решить программерский quiz.
Цель головоломки — с помощью доступных классов (код 1) вывести фразу, которую я поместил в топик этой публикации. Для тех, кто захочет почитать пост в оригинале — ссылку на сам вопрос я дал выше, искомый ответ там помечен как accepted. Для всех остальных же непосредственно задание вот:
- using System;
-
- public interface IWord {
- void Print();
- }
-
- public interface IWord2 : IWord {
- new void Print();
- }
-
- public abstract class Base {
- protected static string msg = "send ";
-
- public Base() {
- Console.Write(this.GetString());
- }
-
- static Base() {
- Console.Write("Never ");
- }
-
- public virtual void Print() {
- Console.Write("to ");
- }
-
- protected virtual string GetString() {
- return "llama ";
- }
- }
-
- public class Derived : Base, IWord {
-
- static Derived() {
- Console.Write(Derived.msg);
- }
-
- public new virtual void Print() {
- Console.Write("do ");
- }
-
- protected override string GetString() {
- return "a ";
- }
- }
-
- public sealed class MoreDerived : Derived, IWord {
- public override void Print() {
- Console.Write("mach");
- }
-
- void IWord.Print() {
- Console.Write("a ");
- }
-
- protected override string GetString() {
- return "do ";
- }
- }
-
- public sealed class MoreDerived2 : Derived, IWord2 {
-
- static MoreDerived2() {
- Console.Write("ine");
- }
-
- public new void Print() {
- Console.Write("job. ");
- }
-
- void IWord2.Print() {
- Console.Write("job.");
- }
-
- protected override string GetString() {
- return "'s ";
- }
- }
-
- public abstract class Unfinished : Base {
- protected new void Print() {
- Console.Write("camel ");
- }
-
- protected override string GetString() {
- return "human ";
- }
- }
-
- public class Finished: Unfinished {
- }
* This source code was highlighted with Source Code Highlighter.
Автором этого ответа предлагается реализовать сам код внутри
- using System;
-
- public class AgentSmith {
- //Never send a human to do a machine's job.
- public static void Main()
- {
- //put your code here
-
- Console.ReadLine();
- }
- }
* This source code was highlighted with Source Code Highlighter.
PS: сам ещё не решал (но мысли определённые есть, конечно же), поэтому, более опытные товарищи, особо в комментариях спойлеры не оставляйте :-)
Всем спасибо и удачи в решении :-)
UPD 1: исправил в соответствии с первым комментарием, однако я не совсем уверен, что условиями задачи запрещается создание новых классов + наследование. и не уверен, что задача решается без этого. естественно могу ошибаться.