У меня есть следующие классы. AuthorTest
и BookTest
наследуются от MyBaseClass
, у которого есть метод AddName
, принимающий общий параметр.
public class Book {
public string Name {get;set;}
}
public class Author {
public string FirstName {get;set;}
public string LastName {get;set;}
}
public class BookTest : MyBaseClass {
Book book = // book object
base.AddName<Book>(book);
}
public class AuthorTest : MyBaseClass {
Author author = // author object
base.AddName<Author>(author);
}
public interface IMyBaseClass {
void AddName<T>(T item);
}
public class MyBaseClass : IMyBaseClass {
public void AddName<T>(T item) {
// item could either be Book or Name
var name = item.Name
// or
var name = item.FirstName + " " item.LastName;
}
}
Как в базовом классе определить, какой тип T
(книга или автор) передается? И на основе этого мне нужно построить переменную name
. Есть ли элегантный способ сделать это?
AddName
имеет разные реализации для разных производных типов, похоже, вы хотите сделать его абстрактным или виртуальным. Если вы обнаружите, что хотите вызватьtypeof(T)
, это становится чрезвычайно вероятным, что вам вообще не нужны дженерики. - person TheGeneral   schedule 07.08.2020