相关疑难解决方法(0)

静态与非静态类成员

我是初学者和编程人员.我有一个简单的问题 - 关于静态/非静态变量的最佳实践是什么.

我有一个变量private int x,它属于y类.要访问此变量,我需要引用y.如果x是静态的,我可以访问此变量而不引用y.

在类y中的几个方法将引用此值的情况下,哪种方法最好?

希望这是有道理的,我的问题不是太基础!

非常感谢

c# oop static class object

22
推荐指数
2
解决办法
4万
查看次数

静态只读与const - 不同的装配POV?

关于这个问题有很多问题,但没有一个(除了一个,但仍然是一个短的)正在处理以下场景.

来自C#4书:

在此输入图像描述

马克还写道:

如果更改const的值,则需要重建所有客户端

题 :

1)为什么?是static readonlyconst- static

2)实际值保存在哪里

3)如何使一个领域static readonly实际上solve这个问题"落后于现场"?

c# static const readonly

17
推荐指数
3
解决办法
2856
查看次数

什么时候静态成员获取内存

我有一个有静态成员的类.据我所知,所有静态成员对于类的所有实例都是通用的,这意味着静态成员只会被分配一次内存.这个内存分配在哪里(堆栈或堆)以及何时分配这个内存?

编辑:此内存与实例级内存不同.如何引用这个内存?在编译时是否分配了这个内存?

.net c# oop

10
推荐指数
1
解决办法
4340
查看次数

.Net在哪里存储泛型类型的静态字段的值?

以下代码允许我为每种类型存储一个值T:

public static class MyDict<T> {
    public static T Value;
}
Run Code Online (Sandbox Code Playgroud)

我可以存储尽可能多的值,并且编译器之前不知道我要使用的类型.这些静态字段值的存储方式和位置在哪里?

更新:显然它存储在内存中,但我想知道这个内存.是堆吗?它是一些特殊的CLR内存吗?怎么称呼?还有什么方式存储?

更新2:JITter MyDict<__Canon>为所有引用类型参数生成单个实现MyDict<T>.然而,这些值是分开存储的.我猜每个类型参数仍然有一些per-type-argument结构,而当vtable链接到JITted时MyDict<__Canon>,字段是分开的.我对吗?

.net c# jit

10
推荐指数
2
解决办法
1009
查看次数

为什么在C#中,从函数参数引用变量比从私有属性更快?

可能是我的硬件是罪魁祸首,但在测试过程中,我发现:

void SomeFunction(AType ofThing) {
    DoSomething(ofThing);
}
Run Code Online (Sandbox Code Playgroud)

......快于:

private AType _ofThing;
void SomeFunction() {
    DoSomething(_ofThing);
}
Run Code Online (Sandbox Code Playgroud)

我认为它与编译器如何将其转换为CIL有关.有谁能解释一下,具体来说,为什么会发生这种情况?

以下是它发生的一些代码:

public void TestMethod1()
{

    var stopwatch = new Stopwatch();

    var r = new int[] { 1, 2, 3, 4, 5 };
    var i = 0;
    stopwatch.Start();
    while (i < 1000000)
    {
        DoSomething(r);
        i++;
    }

    stopwatch.Stop();

    Console.WriteLine(stopwatch.ElapsedMilliseconds);

    i = 0;
    stopwatch.Restart();
    while (i < 1000000)
    {
        DoSomething();
        i++;
    }

    stopwatch.Stop();

    Console.WriteLine(stopwatch.ElapsedMilliseconds);
}

private void DoSomething(int[] arg1)
{
    var r = arg1[0] * arg1[1] …
Run Code Online (Sandbox Code Playgroud)

c# performance cil

4
推荐指数
2
解决办法
730
查看次数

存储C#的静态类内存分配

我读了一篇让我对内存分配感到困惑的文章,其中说:

Singleton对象存储在堆上,而静态类存储在堆栈中.

链接是:http: //www.dotnetjalps.com/2013/06/Static-vs-Singleton-in-Csharp-Difference-between-Singleton-and-Static.html

但在一些Stackoverflow问题中,例如

如何为静态变量分配内存?

它被描述为

静态变量存储在堆上,无论它们是声明为引用类型还是值类型.无论创建多少个实例,总共只有一个插槽.

所以我对静态类的堆栈或堆存储感到困惑.如何为静态类分配内存?为什么?如何为单例类分配内存?

c# memory-management

4
推荐指数
3
解决办法
2万
查看次数

将静态字段分配给实例字段并不指向同一对象的内容

在这个小提琴中,我们将静态字段分配给实例字段.当我们更改静态实例时,实例一仍然具有初始值.这是为什么?我们认为两者都应该指同一个对象,但似乎它们不是.

using System;

public class Program
{
    public static string StaticString;
    public string InstanceString;

    public static void Main()
    {
        Program.StaticString = "foo";

        var p = new Program();
        p.InstanceString = Program.StaticString;

        Program.StaticString = "bar";

        Console.WriteLine(p.InstanceString);
    }
}
Run Code Online (Sandbox Code Playgroud)

我们真的希望这可以打印,bar但它打印出来foo.

c#

1
推荐指数
1
解决办法
88
查看次数

标签 统计

c# ×7

.net ×2

oop ×2

static ×2

cil ×1

class ×1

const ×1

jit ×1

memory-management ×1

object ×1

performance ×1

readonly ×1