English 中文(简体)
高等师范学校
原标题:Collections of Derived Child Classes

是否在<>无<>/em>的收集中添加可能产生效果的物体的公认方法,允许自行制造基地或衍生物体的情况? 我认为,这几乎是矛盾的。

关于我能介绍的唯一方法,就是在从儿童基础实施中增加父母的收集,如:

// Child constructors
private void Child() { }
protected void Child(Parent parent)
{
    parent.Collection.Add(this);
}

这迫使儿童反对总是与父母亲当面,但似乎只是简单地实施,在孩子的母子收藏中添加一个孩子类别。 我知道,我可以将类型变数传递给一种方法,这可能是前进的道路,但我不敢肯定如何创造/将这种变式推向过去类型。


最新信息:我玩.手法,视之为一种可能的通用儿童感。 添加方法,如果能让任何人更好地了解我想要的东西......我们看一看它是否长期运作:

// Currently testing directly in Parent class;
// can later be moved/modified for Parent s ChildCollection class.
public Child AddTest(string info, Type derivedType)
{
    ConstructorInfo ci = derivedType.GetConstructor(new Type[] { typeof(Parent) });
    Child myBaby = (Child) ci.Invoke(new Object[] { this });
    myBaby.Initialize(info);
    return myBaby;
}

之后,可采用诸如:

Child newChild = Parent.AddTest("Hello World", typeof(DerivedChild));
最佳回答

归根结底,我先谈一下与我在最新版本中所说的非常相似的法典。 我把它放在这里,因为我认为它对于一个通用物体工厂或一个有限的工厂(在这种情况下,仅限于来自儿童阶级的工厂)都是一种有用的技术。

基本想法是建立习俗收集,然后采用添加方法(或或许我应该把它命名为一种方法)来当场处理该目标,并适当处理任何在儿童衍生工具中被压倒性初步化的问题。

这部法典的缩略语是:

// Use standard Child
public Child Add(string initInfo)
{
    Child newChild = new Child(this.Parent);
    // There s actually a bit more coding before Initialize()
    // in the real thing, but nothing relevant to the example.
    newChild.Initialize(initInfo);
    List.Add(newChild);
    return newChild;
}

// Overload for derived Child.
public Child Add(Type childDerivative, string initInfo)
{
    if (!childDerivative.IsSubclassOf(typeof(Child)))
        throw new ArgumentException("Not a subclass of Child.");
    ConstructorInfo ci = childDerivative.GetConstructor(
        BindingFlags.Instance |
        BindingFlags.Public | BindingFlags.NonPublic |
        BindingFlags.FlattenHierarchy |
        BindingFlags.ExactBinding, 
        null, new Type[] { typeof(Parent) }, null);
    if (ci == null)
        throw new InvalidOperationException("Failed to find proper constructor.");
    newChild = (Child)ci.Invoke(new Object[] { this.Parent });
    newChild.Initialize(initInfo);
    List.Add(newChild);
    return newChild;
}

这可能无法涵盖所有可能的衍生结果。 用户申请可能想要创造(特别是如果他们重新为建筑商增加自己的参数),我想,Ill可能也提供一种添加(儿童)的方法,并告诫说,如果使用者正在用标准“新儿童”(Parent),他们也有责任按照预期的方式采取一切初步标准化步骤。

问题回答

如果你真心不希望能够选择父母类型的情况,那么就应该保护其建筑或宣布其为抽象。

然后,你可以制造子类,很容易地将其添加到清单中,并且不可能产生基类的情况。

限制是,没有父母,就存在儿童物体。 如何处置诸如“遗产”或“财产”之类的财产,并使用内部方法将儿童物品附在父母身上? 然后可以在你的法律基础中任何地方建造儿童物品,但直到随附后,才能打成有效的儿童物品。

- internal Attach(parent) 
- internal Detach() 
- public IsAttached

然后,父母收集可以实施增加儿童物品和进行某种鉴定的方法。 我按照表格和管制思路思考。

Collection.Add(child) 
{
    // throw error if the child is not the right type
    child.Attach(this)
    base.add(child)    
} 




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签