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实现节属性