4具有相同属性和方法的类 - 是否可以只创建一个?

时间:2012-02-01 22:05:22

标签: c# class

我在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个类的类吗? 并且在类自己中我只为该类创建特定的属性/方法?

重复代码对我来说似乎很奇怪,我确定必须有办法做到这一点,只是不知道如何。

5 个答案:

答案 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)

你能让他们全部继承同一个班级吗?如果是这样,那听起来很理想。

除了使它们继承的可能性之外,你可以编写一个接口来描述它们每个使用的方法和属性。然后,您可以通过相同的接口调用该类的每个实例。

再次禁止这种可能性,你可以写一个反思的转让人/访问者。但你不应该这样做。