Создание функции, которая будет обрабатывать объекты с общими свойствами - PullRequest
0 голосов
/ 04 января 2011

Возьмите это в качестве примера

Я обрезал этот пример для удобства чтения, и вы можете не найти здесь использования этой концепции.

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 функция

GetEncryptedName(Teacher)
GetEncryptedName(Student)

Как вы реализуете такие вещи?

Ответы [ 4 ]

6 голосов
/ 04 января 2011

Вам необходимо реализовать общий интерфейс / базовый класс как для учителя, так и для ученика:

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

Таким образом, вы можете вызвать GetEncryptedName, когда любой объект, который реализует интерфейс IPerson и гарантированно реализует свойства Name и Salt

1 голос
/ 04 января 2011

Вам нужен интерфейс, который реализуют оба класса. Затем вы можете передать в метод 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 на интерфейсы: интерфейс (C # Reference)

1 голос
/ 04 января 2011

Вот один из подходов. И Teacher, и Student наследуются от базового класса, назовем его Person. Этот класс Person будет иметь два свойства Name и Salt, а также может иметь открытый метод GetEncryptedName(), который будет поддерживать вашу реализацию в одном месте.

0 голосов
/ 04 января 2011

вы можете определить интерфейс, который реализуют оба предложения Учителя и Ученика. Что-то вроде: Вот что я бы сделал.

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

Если вы не хотите определять этот интерфейс, вам придется использовать отражение, чтобы получить значения свойств по имени. Есть много примеров, информация в Интернете по этой теме. http://www.codeguru.com/csharp/csharp/cs_misc/reflection/article.php/c4257

...