以此为例
为了便于阅读,我修剪了这个例子,你可能在这里找不到这个概念的使用。
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)
你如何实现这种东西?
答案 0 :(得分: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接口并确保实现Name和Salt属性的对象时,您可以调用GetEncryptedName
答案 1 :(得分:1)
这是一种方法。让Teacher
和Student
继承自基类,我们称之为Person
。此Person
类将包含两个属性Name
和Salt
,并且还可以使用名为GetEncryptedName()
的公共方法,这样可以将您的实施组织在一个位置。
答案 2 :(得分: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)
答案 3 :(得分:0)
您可以定义教师和学生分组实施的界面。就像是: 这就是我要做的。
interface IEncryptionInfoProvider
{
Name {get; set;}
Salt {get; set;}
}
如果您不想定义此接口,则必须使用反射来按名称获取属性的值。 网上有很多关于这个主题的例子,信息。 http://www.codeguru.com/csharp/csharp/cs_misc/reflection/article.php/c4257