English 中文(简体)
B. 创建功能中的新物体
原标题:Creating new object in function call
  • 时间:2011-10-25 14:24:29
  •  标签:
  • c#

我很想知道,作为方法的一部分(或实际上是建筑人呼吁)创建新物体是否安全。

举例如下:

public class Igloo
{
    public int i = 5;
}

public class Program
{
    static void Main(string[] args)
    {
        DoSomething(new Igloo());
    }

    private static void DoSomething(Igloo i)
    {
        Debug.WriteLine(i.i);
    }
}

Is creating temporary objects like this frowned upon? Does the new object that is created get cleaned up properly.

最佳回答

没有什么错误。

在释放模式中,为这个物体设定一个变量,应最终汇编到相同的国际法律文件(免责者:我已经检查过)。

问题回答

如果你创立了一个Windows Form项目,而不是一个灯塔,那么你就会在节目中找到以下线。

Application.Run(new FormMain());

因此,似乎管理系统也与窗口表格项目的缺省完全相同。

标签制度是正确的,完全是罚款,所有意图和目的与以下做法完全相同:

Igloo igloo = new Igloo();
DoSomething(igloo);

在<代码>Igloo后两个情况下,通过<代码>DoSometh方法,目前无法从<代码>Main中查询,使收件在<代码>DoSomething方法完成后即可查阅。


如果我们想更详细地审视一下正在发生的情况,那么,我们就在国际法学会上走了一步:

.method private hidebysig static 
    void Main (string[] args) cil managed 
{
    // Method begins at RVA 0x2060
    // Code size 13 (0xd)
    .maxstack 8
    .entrypoint

    IL_0000: nop
    IL_0001: newobj instance void ConsoleApplication1.Igloo::.ctor()
    IL_0006: call void ConsoleApplication1.Program::DoSomething(class ConsoleApplication1.Igloo)
    IL_000b: nop
    IL_000c: ret
}

为了解释这一意思;我们认为,在上,我们创建了一个新案例:——因为《刑法》是一种固定的虚拟机器,因此这一指示将提及这一实例。 下面的指令是:<代码>DoSomething——《刑法》再次规定,《刑法》是一种固定的虚拟机器,因此,论点被推向左边右边(最后一点是右上的理由)。 在本案中,只有1个论点,由于最后的行动,它已经处于停滞状态,因此我们准备采用我们的方法。

如果我们把这一点与我们在作出以下修改时产生的国际空间法研究所进行比较:

Igloo igloo = new Igloo();
DoSomething(igloo);

We can see only a couple of important differences:

.method private hidebysig static 
    void Main (string[] args) cil managed 
{
    // Method begins at RVA 0x2060
    // Code size 15 (0xf)
    .maxstack 1
    .entrypoint
    .locals init (
        [0] class ConsoleApplication1.Igloo igloo
    )

    IL_0000: nop
    IL_0001: newobj instance void ConsoleApplication1.Igloo::.ctor()
    IL_0006: stloc.0
    IL_0007: ldloc.0
    IL_0008: call void ConsoleApplication1.Program::DoSomething(class ConsoleApplication1.Igloo)
    IL_000d: nop
    IL_000e: ret
}

除当地人被宣布为唯一区别的方法开始之外,还有<代码>stloc.0和ldloc.0。 在建立<代码>Igloo与我们呼吁<代码>DoSomething之间打电话。 这是什么?

stloc.0 is an Directive to pop the final items off the ack andstor it in the 0th local. 此时此刻,我们不再有打上<条码>的正确栏目:DoSomething(我们需要我们的<条码>,Igloo作为顶端的例),这就是:<条码>ldloc.0——它把第0位当地人(背)推向 st。 基本上,这两项指示是我们的任务。

请注意,如果联合会计师协会将这些声明汇编成机码,几乎肯定会取消这两项声明。

c # all all all all

是的,就是ok。 以后将自动删除该物体。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签