草庐IT

Unity—委托

全部标签

c# - 任何方法类型的委托(delegate) - C#

我想要一个可以执行任何外部方法的类,如下所示:classCrazyClass{//otherstuffpublicAnyReturnTypeExecute(AnyKindOfMethodMethod,object[]ParametersForMethod){//morestuffreturnMethod(ParametersForMethod)//orsomethinglikethat}}这可能吗?是否有采用任何方法签名的委托(delegate)? 最佳答案 您可以通过Func以不同的方式执行此操作和关闭:publicTExecut

c# - 将零参数作为参数传递——行为定义在哪里?

C#规范。允许你调用一个函数voidfoo(paramsint[]x)零参数。但是,我没有在C#Lang中找到。规范关于进一步的行为——foo会得到空数组或空引用吗?我还检查了MSDN——什么也没有。行为定义在哪里?注意:我不是在问VS的行为,我是在问语言的设计。 最佳答案 C#语言规范第7.4.1节(引用:C#3.0spec)Inparticular,notethatanemptyarrayiscreatedwhentherearezeroargumentsgivenfortheparameterarray.这是该节的最后一行

c# - 如何作为委托(delegate)传递属性?

这是一个理论问题,我已经找到了解决问题的方法,这让我走上了不同的道路,但我认为这个问题仍然可能很有趣。我能否像使用方法一样将对象属性作为委托(delegate)传递?例如:假设我有一个加载了数据的数据读取器,每个字段的值都需要传递到不同类型的属性中,这些属性已经过DBNull检查。如果尝试获取单个字段,我可能会这样写:if(!rdr["field1"].Equals(DBNull.Value))myClass.Property1=rdr["field1"];但如果我有100个字段,那很快就会变得笨拙。有几种调用方法看起来不错:myClass.Property=GetDefaultOrV

C# 动态关键字——运行时惩罚?

在C#中将实例定义为动态意味着:编译器不执行编译时类型检查,但会像往常一样对所有实例进行运行时检查。编译器不执行编译时类型检查,但会进行运行时检查,这与任何其他非动态实例不同。与2相同,这会带来性能损失(微不足道?可能很重要?)。 最佳答案 这个问题很困惑。DoesdefininganinstanceasdynamicinC#mean:“定义一个实例”是指“声明一个变量”吗?Thecompilerdoesnotperformcompile-timetypechecking,butrun-timecheckingtakesplacel

c# - 短路语句评估——这有保证吗? [C#]

这里是关于C#中的短路语句的快速问题。使用这样的if语句:if(MyObject.MyArray.Count==0||MyObject.MyArray[0].SomeValue==0){//....}如果“MyArray.Count”部分为真,是否保证评估会在该部分之后停止?否则我会在第二部分得到一个空异常。 最佳答案 是的,这是有保证的。C#LanguageSpecification-7.11Conditionallogicaloperators:The&&and||operatorsarecalledtheconditional

c# - 使用 ASP.NET Session 进行生命周期管理 (Unity)

我正在考虑使用Unity来管理自定义用户类实例的生命周期。我计划使用自定义ASP.NETsession管理器扩展LifetimeManager。我想要做的是从我的自定义类中存储和检索当前登录的用户对象,并让Unity从ASP.NET中的session对象中获取用户实例,或者(在Win32项目中)检索它静态或来自当前线程。到目前为止,我最好的解决方案是在启动时创建我的Unity容器的静态实例,并使用Resolve方法从我的每个类中获取我的User对象。但是,这似乎在我的其他类中创建了对统一容器的依赖。实现这一目标的更“团结”的方式是什么?我希望能够从任何类中读取/替换当前的User实例。

c# - 如果异步委托(delegate)调用永远不会返回会发生什么?

我找到了一个看起来不错的示例,说明如何使用超时异步调用委托(delegate)...http://www.eggheadcafe.com/tutorials/aspnet/847c94bf-4b8d-4a66-9ae5-5b61f049019f/basics-make-any-method-c.aspx.总之,它使用带有超时的WaitOne来确定调用是否在超时到期之前没有返回。我还知道您应该有一个EndInvoke来匹配每个BeginInvoke。那么如果等待超时到期会发生什么?我们(大概)不想调用EndInvoke,因为那样会阻塞。代码可以继续做“其他事情”,但我们泄露了什么吗?是否

c# - "Two-level"委托(delegate)的泛型方法参数推断

考虑以下示例:classTest{publicvoidFun(Funcf){}publicstringFun2(stringtest){return"";}publicTest(){Fun(Fun2);}}这编译得很好。我想知道为什么我不能删除通用参数?我收到无法从用法中推断出的错误。我知道这样的推断对编译器来说可能具有挑战性,但它似乎是可行的。我想要对此行为的解释。编辑回答JonHanna的回答:那为什么这样行得通呢?classTest{publicvoidFun(T1a,Funcf){}publicstringFun2(inttest){returntest.ToString();

Unity3d 中的 c# 方法重写

最近几周,我使用c#作为脚本语言玩过Unity3d。我以前从未使用过c#或Unity3d,我正在尝试了解方法重写在Unity框架中的工作原理。让我感到奇怪的是,我可以扩展基类MonoBehavior并覆盖Start()、Update()等方法,而无需使用override关键字,编译器不会提示它!相反,在“普通”C#程序中,我必须使用override关键字,否则我会收到编译器警告。例如:publicclassBaseClass{publicvirtualvoidMyMethod(){Console.WriteLine("BaseClass.MyMethod()");}}publiccla

c# - 使用 async/await 进行设计——一切都应该是异步的吗?

假设我有一个接口(interface)方法实现为publicvoidDoSomething(Useruser){if(user.Gold>1000)ChatManager.Send(user,"Youarerich:"+user.Gold);}一段时间后我意识到我想改变它:publicasyncTaskDoSomething(Useruser){if(user.Gold>1000)ChatManager.Send(user,"Youarerich:"+user.Gold);if(!user.HasReward){using(vardbConnection=awaitDbPool.Ope