C# 创建将处理具有公共属性的对象的函数
以此为例, 为了便于阅读,我对这个示例进行了裁剪,您可能在这里找不到这个概念的用法C# 创建将处理具有公共属性的对象的函数,c#,.net,function,properties,casting,C#,.net,Function,Properties,Casting,以此为例, 为了便于阅读,我对这个示例进行了裁剪,您可能在这里找不到这个概念的用法 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;} } pu
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)
您如何实现此类功能?您需要在教师和学生中实现一个通用接口/基类:
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。这里有一种方法。让
Teacher
和Student
都从基类继承,我们称之为Person
。这个Person
类将有两个属性,Name
和Salt
,它还可以有一个名为GetEncryptedName()
的公共方法,它将使您的实现组织在一个地方。您可以定义一个教师和学生类都实现的接口。比如:
这就是我要做的
interface IEncryptionInfoProvider
{
Name {get; set;}
Salt {get; set;}
}
如果不希望定义此接口,则必须使用反射按名称获取属性值。
关于这个话题,网上有很多例子和信息。
您需要两个类都实现的接口。然后可以将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对接口的引用:请注意,这不会编译。。。。教师需要从IPerson实现节属性