2013/07/23(Tue) 10:21:56 編集(投稿者)
■No67282 (TAKAHIRO さん) に返信
書いてある通りの実装に近いと思われるものです。
namespace MyIndexers
{
public interface Iindexer
{
string LineCut(string line);
}
public class indexer1:Iindexer
{
string name;
int nameLen = 20;
string age;
int ageLen = 3;
int allLen = 23;
string Iindexer.LineCut(string line)
{
if (line.Length == allLen)
{
name = line.Substring(0, nameLen);
age = line.Substring(nameLen);
return name + "," + age;
}
else
{
return "";
}
}
}
public class indexer2:Iindexer
{
string job;
int jobLen = 10;
string saraly;
int salaryLen = 8;
int allLen = 18;
string Iindexer.LineCut(string line)
{
if(line.Length == allLen){
job = line.Substring(0, jobLen);
saraly = line.Substring(jobLen);
return job + "," + saraly;
}else{
return "";
}
}
}
}
使う方(とりあえずFormにTextBox配置で実装してみました)
using System.Reflection;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// 実行されれているファイルを取得
Assembly exeasm = Assembly.GetExecutingAssembly();
// textBox1に入力された型名の型情報を取得(名前空間は固定)
Type IndexerType = exeasm.GetType("MyIndexers." + textBox1.Text);
// 型情報からインスタンスを作成
// Iindexerインターフェースを実装しているのでキャストが可能
Iindexer inst = (Iindexer)Activator.CreateInstance(IndexerType);
// LineCutを実行
textBox3.Text = inst.LineCut(textBox2.Text);
}
}