创建一个处理具有公共属性的对象的函数

时间:2011-01-04 02:51:11

标签: 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;}
}

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

调用函数

GetEncryptedName(Teacher)
GetEncryptedName(Student)

你如何实现这种东西?

4 个答案:

答案 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)

这是一种方法。让TeacherStudent继承自基类,我们称之为Person。此Person类将包含两个属性NameSalt,并且还可以使用名为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