我们可以在一个块或函数内初始化一个Object(之前没有声明它),这样它也可以在它的块之外使用......?
这里Type2是Type1
的派生类例如:
if(a==b)
{ Type1 obj = new Type1();}
else
{Type2 obj = new Type2();}
obj.getFunction();
我有一个基类USER派生类ADMIN,在登录时必须根据用户的角色创建一个对象,然后使用该对象,这样我每次都不需要检查用户的角色。 (我是新手)
这是可能的吗?
答案 0 :(得分:5)
为什么不简单地在范围内执行该功能?您无法访问范围之外的变量。 (除非看到Jon Skeet的答案(竞技场上最好的球员步骤)...... )
if(a==b)
{
TYPE1 obj = new TYPE1();
obj.function();
}
else
{
TYPE2 obj = new TYPE2();
obj.function();
}
答案 1 :(得分:5)
变量只能是一种或另一种 - 否则编译器将如何知道之后允许的成员访问权限?
如果有一些公共基类型(基类或接口)声明function
,那应该是变量的类型:
BaseType obj;
if (a == b)
{
obj = new Type1();
}
else
{
obj = new Type2();
}
obj.Function(); // Name fixed to follow conventions
这会更简单:
BaseType obj = a == b ? (BaseType) new Type1() : new Type2();
obj.Function();
如果他们真的不同类型,那么你有效地调用完全独立的方法,那么要么你需要在每个块中声明变量并调用那里的方法,或者如果您使用的是C#4或更高版本,可以使用动态类型:
dynamic obj = a == b ? (dynamic) new Type1() : new Type2();
obj.Function();
你真的应该考虑这是否是一个真正普通的函数,在这种情况下应该在基类型中声明,或者它是否只是巧合你有两个具有相同名称的函数,在这种情况下尝试以相同的方式对待它们是一个坏主意。 (想象一下你重构一种类型来改变方法名称,例如......)
答案 2 :(得分:5)
我们可以在块或函数内创建变量(无需声明 之前它也可以在它的块之外使用......?
不,你不能那样做。您必须在块外部定义变量,以便您也可以在外部访问它。