我在SO上有另一个问题,在考虑之后,我可能会以错误的方式接近这个问题。
我有4个类,它们具有相同的属性和方法。 一些类,有自己的属性和方法(不是现有属性的覆盖)。
目前我创建的每个类为:
public class ClassOne
{
public ClassOne()
{
}
public int ID {get;set;}
// More properties here
public void Set(){
// Do Stuff to save this
}
// More Methods here
}
我不能创建一个可以生成所有4个类的类吗? 并且在类自己中我只为该类创建特定的属性/方法?
重复代码对我来说似乎很奇怪,我确定必须有办法做到这一点,只是不知道如何。
答案 0 :(得分:4)
您的情况是inheritance被发明的主要原因之一。所以,你可以写
public class Base
{
// Properties and methods common to all
}
public class ClassOne : Base
{
// Properties and methods specific to ClassOne
}
public class ClassTwo : Base
{
// Properties and methods specific to ClassTwo
}
public class ClassThree : Base
{
// Properties and methods specific to ClassThree
}
public class ClassFour : Base
{
// Properties and methods specific to ClassFour
}
答案 1 :(得分:2)
您可以简单地使用您的属性创建一个基类并继承该类吗?
答案 2 :(得分:2)
根据要求,使用接口和抽象类的更多代码:
接口只是一个蓝图,定义了与其他“BaseClasses”兼容所需的属性和方法
public interface IBaseClass
{
public int ID {get;set;}
public void Set();
}
抽象类可以包含代码,但不能实例化,它们是类的起点形式,但不是自己的完整类。
public abstract class ABaseClass : IBaseClass
{
public int ID {get;set;}
public void Set(){
// Do Stuff to save
}
}
每个类都继承自抽象类,然后可以覆盖并实现它想要的任何东西,但是必须自定义它。
public class ClassOne : ABaseClass
{
}
public class ClassTwo : ABaseClass
{
}
public class ClassThree : ABaseClass
{
}
public class ClassFour : ABaseClass
{
}
PS。不完全确定我的语法是否100%正确
答案 3 :(得分:0)
为什么不使用继承?
public class ClassOne
{
public ClassOne()
{
}
public virtual int ID {get;set;}
// More properties here
public virtual void Set(){
// Do Stuff to save this
}
// More Methods here }
public class ClassTwo : ClassOne
{
public string ClassTwoString { get; set; }
}
public class ClassThree : ClassOne
{
public string ClassThreeString { get; set; }
}
答案 4 :(得分:0)
你能让他们全部继承同一个班级吗?如果是这样,那听起来很理想。
除了使它们继承的可能性之外,你可以编写一个接口来描述它们每个使用的方法和属性。然后,您可以通过相同的接口调用该类的每个实例。
再次禁止这种可能性,你可以写一个反思的转让人/访问者。但你不应该这样做。