帰りの電車でふと思いついたたとえ話。
COM, C#で定義されているinterfaceは、ものまねで考えるとわかりやすいかも?
多分、こんなたとえがなりたつのでは・・・
ものまねタレントをオブジェクト、レパートリーをinterfaceにたとえる。
で、コロッケさんでかんがえてみる。
コロッケさんの代表的なレパートリー、野口五郎さんと、五木ひろしさん。
とあるものまね番組でコロッケさんが野口五郎さんinterfaceをつかって
野口五郎さんのものまねをしている。
そこに司会者が五木さんのものまねを依頼したところ野口さんから五木ひろしさん
interfaceのcastを使ってはや代わりした。 次にビートたけしさんのものまねを
依頼したができなかった。これを C#の構文で書くと
I野口 = ('コロッケ as I野口);
野口五郎さんの真似
I五木 = (I野口 as I五木);
五木ひろしさんのまね
Iビート = (I五木 as Iビート)
エラー (ものまね不可)
これって、interfaceのなんちゃら性の説明になっている気がします。
また、五木ひろしさんのものまねでも。とコロッケさんの清水アキラさんのそれ
では、その振る舞いがことなっています。
これを C#であらわしみると
class コロッケ :物まね,I五木
{
}
class 清水アキラ :物まね,I五木
{
}
I五木 itsuki;
itsuki = コロッケ as I五木
コロッケの五木ひろしの物まね
ituski = 清水アキラ as I五木
清水アキラの五木ひろしの物まね
これって、interfaceを使った多態の説明になってると思うのですが・・・
2007年8月26日日曜日
2007年8月22日水曜日
interfaceの法則
COM(DCOM)では、Interfaceに次の法則が成り立ちます。
これがC#(.Net Fraemework)のinterfaecで成り立つかどうか
へなちょこプログラマの自分には、分からなかったので実験
してみた。
結果は、c#のintercaeについてもなりたつようだ。
以下、実験につかったしょぼいコードです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace InterfaceCastTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
IInu anonenone;
anonenone = new TAnonenone();
label1.Text = anonenone.wanwanwan();
label2.Text = (anonenone as INeco).nyannyannyan();
label3.Text = (anonenone as IAhiru).gagaga();
label4.Text = (anonenone as IKaeru).gagaga();
}
}
interface IInu
{
string wanwanwan();
}
interface INeco
{
string nyannyannyan();
}
interface IAhiru
{
string gagaga();
}
interface IKaeru
{
string gagaga();
}
class TAnonenone : IInu, INeco, IAhiru, IKaeru
{
public string nyannyannyan()
{
return "nyan nyan nyan";
}
public string wanwanwan()
{
return "wan wan wan";
}
public string gagaga()
{
return "ga ga ga";
}
}
}
これがC#(.Net Fraemework)のinterfaecで成り立つかどうか
へなちょこプログラマの自分には、分からなかったので実験
してみた。
結果は、c#のintercaeについてもなりたつようだ。
以下、実験につかったしょぼいコードです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace InterfaceCastTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
IInu anonenone;
anonenone = new TAnonenone();
label1.Text = anonenone.wanwanwan();
label2.Text = (anonenone as INeco).nyannyannyan();
label3.Text = (anonenone as IAhiru).gagaga();
label4.Text = (anonenone as IKaeru).gagaga();
}
}
interface IInu
{
string wanwanwan();
}
interface INeco
{
string nyannyannyan();
}
interface IAhiru
{
string gagaga();
}
interface IKaeru
{
string gagaga();
}
class TAnonenone : IInu, INeco, IAhiru, IKaeru
{
public string nyannyannyan()
{
return "nyan nyan nyan";
}
public string wanwanwan()
{
return "wan wan wan";
}
public string gagaga()
{
return "ga ga ga";
}
}
}
2007年8月16日木曜日
.Net版TStringList?
.Net Framework2.0でStringCollectionクラスが追加されている。
これって、TStringListに近い気がする。
でもTextが取れないの・・・・
StringBuilderと組み合わせれば、TStringListにかなり近くなるかも
これって、TStringListに近い気がする。
でもTextが取れないの・・・・
StringBuilderと組み合わせれば、TStringListにかなり近くなるかも
2007年8月13日月曜日
登録:
投稿 (Atom)