2011-01-04 14 views
0

これを例として取る共通のプロパティを持つオブジェクトを処理する関数を作成する

この例は読みやすくするためにトリミングしてありますが、ここではこの概念を使用しない場合があります。

class Teacher() 
{ 
public Name {get; set;} 
public Salt {get; set;} 
public Department{get; set;} 
} 

class Student() 
{ 
public Name {get; set;} 
     public Salt {get; set;} 
public Section{get; set;} 
} 

public string GetEncryptedName(object Person) 
{ 
//return encrypted name based on Name and Salt property 
return encrypt(object.Salt,object.Name) 
} 

機能

GetEncryptedName(Teacher) 
GetEncryptedName(Student) 

どのようなもののこの種を実装するのですcallig?

答えて

6

あなたは教師と生徒の両方に共通のインターフェース/基本クラスを実装する必要があります。

interface IPerson { 
    string Name {get;set;} 
    string Salt {get;set;} 
} 

class Teacher : IPerson... 

class Student : IPerson... 

public string GetEncryptedName(IPerson person) 
{ 
//return encrypted name based on Name and Salt property 
return encrypt(person.Salt,person.Name) 
} 

任意のIPersonインターフェイスを実装するオブジェクトとは名前と塩を実装するために保証されているときに、GetEncryptedNameを呼び出すことができますこの方法特性

1

これは1つのアプローチです。 TeacherStudentの両方が基本クラスから継承している場合は、Personとしましょう。このPersonクラスは、NameSaltという2つのプロパティを持ち、GetEncryptedName()というパブリックメソッドを持つこともできます。これにより、実装を一箇所にまとめることができます。

0

TeacherとStudentの両方のクラスが実装するインターフェイスを定義できます。何かが好き: それは私がやることです。

interface IEncryptionInfoProvider 
{ 
    Name {get; set;} 
    Salt {get; set;} 
} 

このインターフェイスを定義しない場合は、名前を使用してプロパティの値を取得するためにリフレクションを使用する必要があります。 多くの例があり、このトピックに関するウェブ上の情報があります。 http://www.codeguru.com/csharp/csharp/cs_misc/reflection/article.php/c4257

1

両方のクラスが実装するインターフェイスが必要です。次に、GetEncryptedName()メソッドにインターフェイスを渡すことができます。ここで

interface IPerson 
{ 
string Name {get; set;} 
string Salt {get; set;} 
string Section {get; set;} 
} 

class Teacher : IPerson 
{ 
public Name {get; set;} 
public Salt {get; set;} 
public Section{get; set;} 
public Department{get; set;} 
} 

class Student : IPerson 
{ 
public Name {get; set;} 
public Salt {get; set;} 
public Section{get; set;} 
} 

public string GetEncryptedName(IPerson person) 
{ 
//return encrypted name based on Name and Salt property 
return encrypt(person.Salt,person.Name) 
} 

がインタフェースにMSDNの参照です:interface (C# Reference)

+0

ただ、これはコンパイルされないことに注意してください....教師はIPerson – Jaime

+0

@Jaimeのおかげからセクションプロパティを実装する必要があります。私はそれを更新しました。コピー&ペーストエラー。 –

関連する問題