我从我们的供应商之一那里收到了一些他们正在发布的网络服务的文档,他们非常具体地指出,在他们的一个WebMethods上,一个参数有out修饰符(?不确定这是否是正确的描述符)例如考虑以下WebMethod签名:[WebMethod]publicvoidHelloWorld(outstringstrVal){strVal="HelloWorld";}[显然实际方法不是HelloWorld方法]现在,我从未考虑过设计带有out/ref参数的WebMethod,这让我想知道他们为什么会使用它。为了理解这个设计决定的应用,我将一个原型(prototype)和一些基本的HelloWorld风格的
关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭6年前。Improvethisquestion我正在努力如何在实际应用程序中使用“ref”(通过引用传递参数)。我想要一个简单且主要有意义的例子。到目前为止,我发现的所有内容都可以通过向方法添加返回类型轻松重做。有人知道吗?谢谢!
此代码输出“输出值”。classP{publicstaticvoidMain(){stringarg=null;try{Method(outarg);}catch{}Console.WriteLine(arg);}publicstaticvoidMethod(outstringarg){arg="outvalue";thrownewException();}}但是这个没有。classP{publicstaticvoidMain(){object[]args=newobject[1];MethodInfomi=typeof(P).GetMethod("Method");try{mi.In
我正在使用反射在对象上调用静态方法:MyType.GetMethod("MyMethod",BindingFlags.Static).Invoke(null,newobject[]{Parameter1,Parameter2});如何通过ref而不是通过值来传递参数?我假设它们默认是按值计算的。第一个参数(数组中的“Parameter1”)应该是ref,但我不知道如何以这种方式传递它。 最佳答案 对于引用参数(或C#中的out),反射会将新值复制到对象数组中与原始参数相同的位置。您可以访问该值以查看更改后的引用。publicclas
考虑:classFoo{privatereadonlystring_value;publicFoo(){Bar(ref_value);}privatevoidBar(refstringvalue){value="helloworld";}publicstringValue{get{return_value;}}}//...varfoo=newFoo();Console.WriteLine(foo.Value);//"helloworld"这如何编译,仍然有效?我不应该能够在构造函数之外为_value字段分配不同的值,因为它被标记为readonly。但是,通过ref传递给方法,确实可以操
好的,我将从.NET反射器中剪切和粘贴以演示我正在尝试做的事情:publicoverridevoidUpdateUser(MembershipUseruser){//Abunchofirrelevantcode...SecUtility.CheckParameter(refuser.UserName,true,true,true,0x100,"UserName");//Moreirrelevantcode...}这行代码直接来自.NETFramework中的System.Web.Security.SqlMembershipProvider.UpdateUser(System.Web.d
我想知道对于值类型是否有任何类似的方法......publicstaticclassExtensionMethods{publicstaticvoidSetTo(thisBooleansource,paramsBoolean[]bools){for(inti=0;i那么这将是可能的:Booleana=true,b,c=true,d=true,e;b.SetTo(a,c,d,e);当然,这是行不通的,因为bool是值类型,所以它们作为值而不是引用传递给函数。除了将值类型包装成引用类型(通过创建另一个类)之外,还有什么方法可以在使用params修饰符时通过引用(ref)将变量传递给函数?
在我的一个类(ClassA)中,我想创建另一个类(ClassB)的相关实例,为其提供对启动其创建的对象的引用。因此,我为ClassB提供了一个带有(refClassBparent)参数的构造函数。但是在ClassA中,我不能只调用varchild=newClassB(refthis)。如何实现? 最佳答案 ref关键字原因PassbyReference语义-也就是说,如果变量在被调用函数中被重新赋值,它也会在调用者中重新赋值变量.显然,这仅在变量2(可以重新赋值)作为参数直接传递时有效,如果是任意表达式则无效通过。在这种情况下,th
我理解(或者至少我相信我理解)通过ref将类的实例传递给方法与不通过ref传递是什么意思。什么时候或在什么情况下应该通过ref传递类实例?对于类实例使用ref关键字是否有最佳实践? 最佳答案 我遇到过的关于输出和引用参数的最清晰的解释是......JonSkeet的。ParameterPassinginC#他没有深入探讨“最佳实践”,但如果您理解他给出的示例,就会知道何时需要使用它们。 关于C#ref关键字用法,我们在StackOverflow上找到一个类似的问题:
其实我是做一个列表作为引用参数如下:publicstaticListListMethod(Listresult)我也看到有人这样做:publicstaticvoidListMethod(refListresult)如果我没记错的话,“my”方法也将list作为引用参数,您应该可以像“other”在他的方法中一样使用它。但在我看来,您输入一个参数,对它做一些事情并在方法返回值中返回它似乎更“干净”。支持或反对一种方法或另一种方法的任何好的论据? 最佳答案 可能您不需要使用ref-但是有区别的。通常当我看到人们使用ref作为引用类型参数