2011-01-04 5 views
0

Nehmen Sie dies als ein BeispielErstellen einer Funktion, die Objekte mit gemeinsamen Eigenschaften

Ich habe getrimmt diesem Beispiel für Lesbarkeit behandelt und Sie können die Verwendung dieses Begriffs hier nicht finden.

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) 
} 

Callig die Funktion

GetEncryptedName(Teacher) 
GetEncryptedName(Student) 

Wie setzen Sie diese Art von Sachen?

Antwort

6

Sie benötigen eine gemeinsame Schnittstelle/Basisklasse sowohl in der Lehrer und Schüler implementieren:

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) 
} 

Auf diese Weise können GetEncryptedName nennen kann, wenn ein Objekt, das die IPerson-Schnittstelle implementiert und garantiert den Namen und das Salz implementieren Eigenschaften

1

Hier ist ein Ansatz. Lassen Sie beide Teacher und Student erben von einer Basisklasse, nennen wir es Person. Diese Person Klasse wird zwei Eigenschaften haben, Name und Salt, und es kann auch eine öffentliche Methode namens GetEncryptedName() haben, die Ihre Implementierung an einem einzigen Ort organisiert.

0

können Sie eine Schnittstelle definieren, die sowohl die Teacher- als auch die Student-Klasse implementieren. Etwas wie: Das würde ich tun.

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

Wenn Sie nicht über diese Schnittstelle definieren wollen, müssten Sie Reflexion verwenden, um die Werte der Eigenschaften von Namen zu erhalten. Es gibt viele Beispiele, Informationen im Internet zu diesem Thema. http://www.codeguru.com/csharp/csharp/cs_misc/reflection/article.php/c4257

1

Sie benötigen eine Schnittstelle, die beide Klassen implementieren. Dann können Sie der GetEncryptedName() -Methode eine Schnittstelle übergeben.

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) 
} 

Hier ist der MSDN Bezug auf Schnittstellen: interface (C# Reference)

+0

Es genügt zu bemerken, dass dies nicht kompilieren würde .... Lehrer müßten die Section-Eigenschaft aus dem IPerson – Jaime

+0

@Jaime Dank implementieren. Ich habe es aktualisiert. Fehler kopieren und einfügen –

Verwandte Themen