您好我的代码如下
public partial class Class1:InheritBase1
{
public Class1()
{
//Access table1 here
}
}
public class InheritBase2
{
protected DataTable table1{get;set;}
}
我需要从 InheritBase2 类访问 table1 到我的班级。
由于C#不允许多重继承,实现此目的的可能方法是什么?
谢谢所有。
答案 0 :(得分:3)
您可以使用合成而不是继承来轻松解决此问题。
假设有一个班级A
和一个班级B
。 A
一个B
。
public class A
{
public B AssociatedB { get; set; }
}
你能详细说明吗 - 凯尔
在面向对象的编程中,有两种方法可以在对象之间创建关系。它们中的任何一个都必须是层次结构。
如果您最终认为某个对象是,我们将讨论继承。例如, cat 是动物。也就是说,类 cat 派生自 animal 。
另一方面,如果你最终认为某个对象有一个 X的东西,我们将讨论组合。例如,汽车有一个引擎。
在一天结束时,如果您使用继承来共享对DataTable
的引用,我真的鼓励您使用 composition ,因为您的类有一个 DataTable
:
public class A
{
public DataTable Table { get; set; }
}
public class B
{
public DataTable Table { get; set; }
}
DataTable someTable = new DataTable();
// Both class instances share the same DataTable
// because you set the same object to both
// class properties
A someA = new A();
someA.Table = someTable;
B someB = new B();
someB.Table = someTable;
答案 1 :(得分:2)
你可以从作文中获益。
class A : B {
}
可以替换为
class A {
B b
}
如果您希望A和B可以在同一个contenxt中使用,则需要介绍一个界面。
该接口允许您定义抽象功能并为其提供各种实现。
interface ISampleInterface
{
void SampleMethod();
}
如果我们有
class B : ISampleInterface
{
void SampleMethod() {
//Do some action
}
}
现在你的A类可以或者在odrder中继承表格B来访问样本方法或使用组合。
class A : ISampleInterface {
B b;
void SampleMethod() {
b.SampleMethod();
}
}
然后我编码你可以像
一样使用它 ISampleInterface sa = new A();
ISampleInterface sb = new B();
sa.SampleMethod(); //Call B through A
sb.SampleMethod(); //Call B
这只是有关更多内容的描述,您应该遵循面向对象编程的教程。