将base-type传递给方法

rei*_*ard -2 c# oop inheritance

如果我有两个派生自基类的类,我怎样才能编写一个泛型方法,它可以操作两个类的继承属性,所以我不需要编写两个方法...

abstract class BaseClass
{
    public int Id { get; set; }
    public string slug { get; set; }
}

public class State:BaseClass
{
    public string StateName{ get; set; }
    public string Description { get; set; }
}

public class City:BaseClass
{
    public string TownName { get; set; }
    public string someOtherProperty{ get; set; }

}
Run Code Online (Sandbox Code Playgroud)

"通用"方法:

public string Slugify( ?????BaseClass???? record)
{
    return record.slug = "...return...something...";
}
Run Code Online (Sandbox Code Playgroud)

调用如:

string a = Slugify(my_State_object); <--- not working
string b = Slugify(my_City_object);  <--- not working
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:州和城市是EF-CodeFirst类.最初都有Id和slug - 字段.

然后我把它们变成了一个基类,因为我在两个(和其他)表中都有这些.

我想要一个返回slug的方法,如:

public string Slugify(string p, System.Data.Entity.DbSet<Models.BaseRecords> dbSet){ return ...}
Run Code Online (Sandbox Code Playgroud)

叫起来像

Slugify(text, my_State_object);
Run Code Online (Sandbox Code Playgroud)

以及

Slugify(otherText, my_City_object);
Run Code Online (Sandbox Code Playgroud)

两个电话都给我一个"......一些无效的参数......"错误.

对不起,这是从德国VS2010翻译的

Adr*_*iro 6

你已经给出了答案:

public string Slugify(BaseClass record)
{
    return record.slug = "...return...something...";
}
Run Code Online (Sandbox Code Playgroud)

问题是你的BaseClass应该像它的孩子一样可访问.公开它会很好:

public abstract class BaseClass ...
Run Code Online (Sandbox Code Playgroud)

  • 虽然这是正确的,但OP代码中应该存在编译时错误.他们的抽象基类比孩子们更容易接近. (2认同)