Quantcast
Channel: いげ太の日記
Viewing all articles
Browse latest Browse all 26

[C#] ダイアモンドだね

$
0
0

NOTE: この記事は、当初、ココログの「いげ太のブログ」で公開していたものです。

Ruby の Mix-in がステキそうなのは動的言語だからなのかな。どうも、C# で有用な Mix-in ってなんだろうって考えると、結局、多重継承みたくなっちゃうんだけども。んー、とりあえず書いてみるべか。

というわけでコード、ダイヤモンド継承。お楽しみに~。

/*
* [EatingMixin]
* △
* │
* ┌───┴───┐
* │ │
* [FoodMixin] [BeverageMixin]
* △ △
* │ │
* └───┬───┘
* │
* [Curry]
*/


public interface EatingMixin
{
string Name { get; }
}
public static class EatingExtensions
{
public static string Eat(this EatingMixin self)
{
return self.Name + "(゚Д゚)ウマー";
}
}

public interface FoodMixin : EatingMixin
{
}
public static class FoodExtensions
{
public static string GetFoodInfo(this FoodMixin self)
{
return self.Name + "は食べ物!";
}
}

public interface BeverageMixin : EatingMixin
{
}
public static class BeverageExtensions
{
public static string GetBeverageInfo(this BeverageMixin self)
{
return self.Name + "は飲み物!";
}
}

public class Curry : FoodMixin, BeverageMixin
{
public string Name
{
get { return "カレー"; }
}
}

class Program
{
static void Main(string[] args)
{
var curry = new Curry();
Console.WriteLine(curry.Eat()); //カレー(゚Д゚)ウマー
Console.WriteLine(curry.GetFoodInfo()); //カレーは食べ物!
Console.WriteLine(curry.GetBeverageInfo()); //カレーは飲み物!
}
}

はい。ためになったね~。これ。ためになったよ~。というわけで、みなさま賛否両論あったと思いますが、ここまででネタ終わりでございます。(©もう中学生)

関連記事


Viewing all articles
Browse latest Browse all 26

Trending Articles