Allow anonymous type objects that implement a "data" interface #7719
-
MotivationCurrently, the norm is to use classes / records to represent DTOs. However, using inheritance is very limited since multiple inheritance is not allowed. As a result, I have to frequently create interfaces for DTOs and some corresponding classes that simply implements all properties defined in the interface. This is not good because
ProposalThe idea is to allow use interfaces to anonymous type object to implement interfaces so we can use interfaces to represent DTOs, like the following: interface I
{
string A { get; set; }
}
var i = new { A = "" } as I; Use CaseCurrent Solutioninterface IUser { /* props A, B, C */ }
abstract class User : IUser { /* props A, B, C */ }
class ExternalUser : User { /* props D, E */ }
class InternalUser : User { /* props F */ }
class AdminUser : User { /* props G */ }
interface IUserDbModel : IUser { /* props U, V, W, X, Y, Z */ }
class ExternalUserDbModel : ExternalUser, IUserDbModel { /* props U, V, W, X, Y, Z */ }
class InternalUserDbModel : InternalUser, IUserDbModel { /* props U, V, W, X, Y, Z */ }
class AdminUserDbModel : AdminUser, IUserDbModel { /* props U, V, W, X, Y, Z */ }
var user = new AdminUserDbModel { /* ... */ }; Desired Solutioninterface User { /* props A, B, C */ }
interface ExternalUser : User { /* props D, E */ }
interface InternalUser : User { /* props F */ }
interface AdminUser : User { /* props G */ }
interface UserDbModel : IUser { /* props U, V, W, X, Y, Z */ }
interface ExternalUserDbModel : ExternalUser, UserDbModel { }
interface InternalUserDbModel : InternalUser, UserDbModel { }
interface AdminUserDbModel : AdminUser, UserDbModel { }
var user = new { /* ... */ } as AdminUserDbModel; In this way, we do not need to define props U, V, W, X, Y, Z in every DbModel DTOs. |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
See: |
Beta Was this translation helpful? Give feedback.
See:
#4301
#4148
#2517
dotnet/roslyn#13