Μπορεί μια μηχανή να γεννάει;
Η απάντηση είναι περισσότερο φιλοσοφική παρά μια τεχνική εφαρμογή της ιδέας.
using System;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Text;
using MachineBirthMechanism.Properties;
namespace MachineBirthMechanism
{
public enum Gender : int
{
Male = 0,
Female = 1
}
public class Machine
{
string name;
DateTime dayOfBirth;
Gender sex;
Machine partner;
Machine newBaby;
Collection<Machine> children;
Random random;
Machine() {
}
public Machine(string name, Gender gender) {
DayOfBirth = DateTime.Now;
this.name = name;
sex = gender;
}
public DateTime DayOfBirth {
get { return dayOfBirth; }
private set { dayOfBirth = value; }
}
public Gender Sex {
get { return sex; }
private set { sex = value; }
}
public string Name {
get { return name; }
set { name = value; }
}
public Machine Partner {
get { return partner; }
set { partner = value; }
}
public Collection<Machine> Children {
get { return children; }
}
public Machine NewBaby {
get { return newBaby; }
private set { newBaby = value; }
}
public bool BornNewBaby() {
if (partner == null) return false;
if (children == null) children = new Collection<Machine>();
if (random == null) random = new Random(unchecked((int)DateTime.Now.Ticks));
NewBaby = new Machine();
NewBaby.DayOfBirth = DateTime.Now;
NewBaby.Name = Guid.NewGuid().ToString().Substring(0, 4);
NewBaby.Sex = random.Next((int)Gender.Male, (int)Gender.Female + 1) == 0 ? Gender.Male : Gender.Female;
Children.Add(NewBaby);
return true;
}
public override string ToString() {
StringBuilder elements = new StringBuilder();
elements.AppendLine(FormatElements(this));
if (partner != null) elements.AppendLine(FormatElements(partner));
elements.AppendLine();
if (children != null) {
foreach (Machine child in children)
elements.AppendLine(FormatElements(child));
}
return elements.ToString();
}
static string FormatElements(Machine machine) {
return string.Format(CultureInfo.CurrentCulture, Resources.FormatElements, machine.Name, machine.Sex, machine.DayOfBirth);
}
}
}
Και ένα παράδειγμα
using System;
namespace MachineBirthMechanism
{
internal class Program
{
static void Main() {
Machine george = new Machine("George", Gender.Male);
george.Partner = new Machine("Foto", Gender.Female);
if (george.BornNewBaby()) george.NewBaby.Name = george.NewBaby.Sex == Gender.Male ? "Jim" : "Rania";
if (george.BornNewBaby()) george.NewBaby.Name = george.NewBaby.Sex == Gender.Male ? "Vag" : "Dimitra";
if (george.BornNewBaby()) george.NewBaby.Name = george.NewBaby.Sex == Gender.Male ? "Alex" : "Matilda";
Console.WriteLine(george.ToString());
}
}
}
source code