从抽象类变量中检索非抽象类属性值

时间:2015-12-26 17:14:25

标签: c# abstract-class

我有一个库,其中ModelElement是一个抽象类,ModelBeam和ModelShell是从ModelElement继承的类。 ModelShell专门有一个名为" mesh"它的值是一个Mesh类。我想知道在检查变量是ModelShell对象后如何从ModelElement变量中检索Mesh。

我希望像上面的代码一样:

public void postTittleClick(View view) {
        EditText tittleInput = (EditText) findViewById(R.id.tittleInput);
        Intent i = new Intent(this, Postdescription.class);

        if (tittleInput.getText().toString().isEmpty()){
             // Here you can place code while edit text is empty
        }else{
            startActivity(i);
        }
    }

3 个答案:

答案 0 :(得分:3)

使用is关键字然后直接投射:

if (elem is ModelShell)
{
    var modelShell = (ModelShell)elem;
    foreach (var m in modelShell.mesh)
    {
        //...
    }
}

如果elem不是ModelShell,则返回false并且永远不会输入if块。

或者,您可以使用as关键字。如果您使用正确的类型进行投射,则会执行强制转换,否则会生成null。因此,在转换之后,您需要检查变量是否为null

var modelShell = elem as ModelShell;
if (modelShell != null)
{
    foreach (var m in modelShell.mesh)
    {
        //...
    }
}

答案 1 :(得分:0)

你可以试试这个..

if(elem instanceof ModelBeam){

}else if(elem instanceof ModelShell){

}

答案 2 :(得分:0)

尝试以下代码。基本上,使用运算符 is 并转换为ModelShell应该可以正常工作。

foreach (ModelElement elem in model.elems)
    {
        if (elem is ModelBeam)
        {
            conect.Add(elem._node_inds);
        }
        if (elem is ModelShell)
        {
    Mesh mesh = ((ModelShell)elem).mesh;
            foreach (Mesh m in mesh)
            {
                conect.Add(m._node_inds);
            }
        }
    }