gpt4 book ai didi

c# - 在 block 外创建一个对象的范围

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:16 25 4
gpt4 key购买 nike

我们能否在 block 或函数内初始化一个对象(之前不声明它),以便它也可以在其 block 外使用...?

这里Type2是Type1的派生类

例如:

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

obj.getFunction();

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

这可能吗??

最佳答案

变量只能是一种或另一种类型 - 否则编译器如何知道之后允许哪些成员访问?

如果有一些公共(public)基类型(基类或接口(interface))声明了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();

如果它们真的是不同的类型,所以您有效地调用了完全不同的方法,那么要么您需要在每个 block 中声明变量并调用那里的方法,或者如果您使用的是 C# 4 或更高版本,您可以使用动态类型:

dynamic obj = a == b ? (dynamic) new Type1() : new Type2();
obj.Function();

你真的应该考虑这是否是一个真正通用的函数,在这种情况下它应该在基类型中声明,或者它是否只是一个巧合两个具有相同名称的函数,在这种情况下试图以相同的方式对待它们是一个坏主意。 (假设你重构一个类型来改变方法名,例如……)

关于c# - 在 block 外创建一个对象的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12559709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com