请问,我未来要写几十个类,不过这些类大部分格式都差不多,只是功能上略有不同。
比如,他们都有如下的属性:public string 执行前的信息{get;set;}
public string 执行后的信息{get;set;}
public bool 执行是否成功{get;set;}
public int 执行次数{get;set;}
public int 受影响数{get;set;}
public XmlNode 执行后的报告{get;set;}
...
...等等这类属性,我不想每个类里都将上面的东西写一次,有没有办法可以避免这么做?比如我现在的做法是:public abstract ClassA{}//这个类里存放的就是很多上面那些重复的东西,然后每个新建类里:
public class ClassA:ClassA{} //继承楼上的ClassA,这样就不用每个新建类都写一次了。我的第一个问题是,我这种做法对吗?如果说到这里大家听懂了,那么我继续:
可是有时候并不是所有类都需要上面的属性,有些类只用到其中的2、3个属性而已,但是继承 ClassA 会把所有的属性都继承了。我的第二个问题是,有没有办法可以较为灵活地选择想要继承的属性呢?说的可能有点糊涂,希望大家耐心询问,谢谢。
比如,他们都有如下的属性:public string 执行前的信息{get;set;}
public string 执行后的信息{get;set;}
public bool 执行是否成功{get;set;}
public int 执行次数{get;set;}
public int 受影响数{get;set;}
public XmlNode 执行后的报告{get;set;}
...
...等等这类属性,我不想每个类里都将上面的东西写一次,有没有办法可以避免这么做?比如我现在的做法是:public abstract ClassA{}//这个类里存放的就是很多上面那些重复的东西,然后每个新建类里:
public class ClassA:ClassA{} //继承楼上的ClassA,这样就不用每个新建类都写一次了。我的第一个问题是,我这种做法对吗?如果说到这里大家听懂了,那么我继续:
可是有时候并不是所有类都需要上面的属性,有些类只用到其中的2、3个属性而已,但是继承 ClassA 会把所有的属性都继承了。我的第二个问题是,有没有办法可以较为灵活地选择想要继承的属性呢?说的可能有点糊涂,希望大家耐心询问,谢谢。
2.可以A派生B,C可以选择从A或B派生。
或者用继承 虚拟函数 virtual 来实现,被继承的不一定要实现这个函数 需要用到的再overrite
public class A
{
public int IntValue { get; set; }
public string StringValue { get; set; }
} public class B
{
public List<int> IntList {get;set;}
public List<string> StringList { get; set; }
} public class CompositeClassA
{
public A ObjectA { get; set; }
public B ObjectB { get; set; }
} public class CompositeClassN
{
public A ObjectA1 { get; set; }
public A ObjectA2 { get; set; }
public B ObjectB1 { get; set; }
public B ObjectB2 { get; set; }
}
请问可以详细解释下吗?
比如我有个下面3个类:public class A1{} // 该类需要用到 IntValue、StringValue 属性
public class A2{} // 该类只需要用到 IntValue 属性
public Class A3{} // 该类需要用到 IntValue、IntList 属性那么按照你的方法,该怎么做呢?
public List<string> GetPropertyValue(string propertyName,
StringSearchOption StringSearchOption = StringSearchOption.StartsWith,
bool trimSpaces = true)
在这里动态获得调用的属性名,你可以处理。dynamic rFile = new ReadOnlyFile(@"..\..\TextFile1.txt");
foreach (string line in rFile.Customer)
{
Console.WriteLine(line);
}
Console.WriteLine("----------------------------");
foreach (string line in rFile.Customer(StringSearchOption.Contains, true))
{
Console.WriteLine(line);
}这个是客户端代码,很明显Customer这个属性不是某个类定义的,它完全是动态产生的。
我给你例子中的类定义,并不适合你要求的A1,A2,A3.
正解组合:就是把一个类作为另一个类的属性!如果你有系列属性(A1-A10),很多过类都要使用
public class A
{
public int A1 { get; set; }
public int A2 { get; set; }
...
public string A10 { get; set; }
} public class B
{
public List<int> IntList {get;set;}
public List<string> StringList { get; set; }
public A {get; set;}; // 这句是组合。这样就可以访问A 的所有公共属性!
}
像你的问题,可以把所有类到要用的属性封装在一个类(如:A)里。一些类(如:x,y,z)要所有的共同属性封装到类(如:B)你的所有类都包含(组合) 类A
x,y,z 类,再多包含(组合) 类B