Переопределение метода с теми же параметрами, но с разными возвращаемыми типами при наследовании

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

Я создаю собственный ASP.NET RoleProvider. Поскольку он наследуется от RoleProvider, я должен переопределить общедоступную строку [] GetAllRoles (). Однако я обнаружил, что string [] недостаточен, поэтому я создал новый класс с именем ProjectRole и заставил GetAllRoles () возвращать List.

Моя причина в том, что моя настраиваемая таблица ролей содержит больше данных, чем просто имена (идентификаторы, имена, описания и т. Д. На нескольких языках, таких как DescriptionE, DescriptionJ и т. Д.), И я хотел бы вместо этого вернуть все о роли просто имени.

Итак, вот и мы (сокращенно для краткости)

public class ProjectRoleProvider : RoleProvider
{
    public override string[] GetAllRoles()
    {
        throw new NotImplementedException();
    }

    public override List<ProjectRole> GetAllRoles()
    {
        List<ProjectRole> rolelist = new List<ProjectRole>();

        SqlConnection conn = new SqlConnection(connstring);
        SqlCommand cmd = new SqlCommand("sprocGetAllRoles", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        conn.Open();
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            if (reader.HasRows == true)
            {
                while (reader.Read())
                {
                    ProjectRole somerole = new ProjectRole();
                    somerole.ProjectRoleID = reader.GetGuid(reader.GetOrdinal("ProjectRoleID"));
                    somerole.RoleNameE = reader.GetString(reader.GetOrdinal("RoleNameE"));
                    somerole.RoleNameJ = reader.GetString(reader.GetOrdinal("RoleNameJ"));
                    somerole.DescriptionE = reader.GetString(reader.GetOrdinal("DescriptionE"));
                    somerole.DescriptionJ = reader.GetString(reader.GetOrdinal("DescriptionJ"));
                    rolelist.Add(somerole);
                }
            }
            reader.Close();
        }
        conn.Close();

        return rolelist;
    }

    public class ProjectRole
    {
       private Guid _projectRoleID = Guid.Empty;
       private string _roleNameE = String.Empty;
       private string _roleNameJ = String.Empty;
       private string _descriptionE = String.Empty;
       private string _descriptionJ = String.Empty;

       //public properties to interact with the private fields

       public ProjectRole()
       {
       }
    }
}

Меня беспокоит то, что я могу просто оставить строку [] GetAllRoles () как нереализованную и назвать свой List GetAllRoles () как-нибудь иначе, вроде GetRoles (), и тогда все нормально. Но тогда действительно неясно, когда вы звоните и видите два варианта с Intellisense («какие из них мне использовать?»).Да, я мог бы использовать XML-комментарии и сказать: «Эй, не используйте это, используйте вместо этого GetRoles», но я бы лучше просто переопределил возвращаемый тип и покончил с этим.

0
задан CptSupermrkt 8 February 2012 в 07:25
поделиться