1

我们可以在一个块或函数内初始化一个对象(之前没有声明它),以便它也可以在它的块外使用......?

这里 Type2 是 Type1 的派生类

例如:

if(a==b)
{ Type1 obj = new Type1();}
else
{Type2 obj = new Type2();}

obj.getFunction(); 

我有一个基类 USER 派生类 ADMIN,必须在用户登录时根据用户的角色创建一个对象,然后再使用该对象,这样我就不需要每次都检查用户的角色..(我是新手)

这可能吗??

4

3 回答 3

5

为什么不简单地在作用域上执行函数呢?您无法访问范围之外的变量。(除非看到 Jon Skeet 的回答(竞技场上的最佳球员步骤)......

if(a==b)
{ 
    TYPE1 obj = new TYPE1();
    obj.function(); 
}
else
{
    TYPE2 obj = new TYPE2();
    obj.function(); 
}
于 2012-09-24T06:11:38.700 回答
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();

您真的应该尝试考虑这是否是一个真正常见的函数,在这种情况下它应该在基类型中声明,或者您有两个同名的函数是否只是巧合,在这种情况下试图以同样的方式对待他们是一个坏主意。(假设您重构一种类型以更改方法名称,例如...)

于 2012-09-24T06:12:51.463 回答
5

我们可以在块或函数内创建一个变量(之前不声明它),以便它也可以在其块外使用......?

不,你不能那样做。您必须在块外部定义变量,以便您也可以在外部访问它。

于 2012-09-24T06:13:14.850 回答