我有以下对象,包含以下字段:
class ObjectA
{
float progress;
bool isDone;
}
class ObjectB
{
bool canceled;
}
我想创建一个绑定的ObjectC
,并拥有ObjectA
和ObjectB
个字段progress
,isDone
和canceled
。
我怎么能这样做?
这是通过dynamic
类型还是某些Interface + ClassWrapper组合实现的?
ObjectA
和ObjectB
类型,类,签名等无法更改。它们是按原样给出的。
答案 0 :(得分:2)
c#中没有类似多类继承的东西。做这种事情的最好方法是为每个行为声明接口:
interface IA
{
float Progress {get;}
bool IsDone {get;}
}
interface IB
{
bool IsCanceled{get;}
}
可能是第三个聚合前两个:
interface IC : IA , IB
{
}
并在一个类中实现。
class C : IC
{
public float Progress { get; set; }
public bool IsDone { get; set; }
public bool IsCanceled { get; set; }
}
然后你必须记住编程接口而不是类:
class SomeClass
{
//If only IA features are required
void DoSTH(IA c){}
}
答案 1 :(得分:0)
你可以通过作文来实现:
public class ObjectC
{
public ObjectA ProgressInfo { get; set; }
public ObjectB CanceledInfo { get; set; }
}
或通过接口:
public interface IProgressable
{
float Progress { get; }
bool IsDone { get; }
}
public interface ICancelable
{
bool Canceled { get; }
}
然后你可以让你的新类实现两个接口:
public class ObjectC : IProgressable, ICancelable
{
...
}
答案 2 :(得分:0)
您正在寻找C#不支持的multiple inheritance
。
一种解决方案是使用接口,但它需要您多次实现代码:
public interface IFoo1
{
float Progress { get; set; }
bool IsDone { get; set; }
}
public interface IFoo2
{
bool Canceled { get; set; }
}
public abstract class ObjectA : IFoo1
{
public float Progress { get; set; }
public bool IsDone { get; set; }
}
public abstract class ObjectB : IFoo2
{
public bool Canceled { get; set; }
}
public class ObjectC : IFoo1, IFoo2
{
public float Progress { get; set; }
public bool IsDone { get; set; }
public bool Canceled { get; set; }
}
答案 3 :(得分:0)
您无法通过常规方式获得所需内容,因为您的字段属于私有字段,因此ObjectA
和ObjectB
之外的任何代码均无法访问。
这样做的唯一方法 - 我根本不推荐,因为它打破了封装 - 将使用反射来访问这些成员。