小编Ole*_*nyk的帖子

使用Interlocked.Exchange更新引用和Int32

众所周知,引用在32位处理器中占用4字节,在64位处理器中占用8字节.因此,处理器保证以机器的自然字大小为增量单次读取和写入存储器将以原子方式执行.另一方面,Interlocked类有两种方法:

public static int Exchange(
    ref int location1,
    int value
)
Run Code Online (Sandbox Code Playgroud)

public static T Exchange<T>(
    ref T location1,
    T value
)
where T : class
Run Code Online (Sandbox Code Playgroud)

那么,问题是为什么Int32和参考类型需要Interlocked.Exchange?仅使用简单的赋值就不能安全地完成,因为它是原子的吗?

.net c# multithreading

17
推荐指数
4
解决办法
9839
查看次数

如何防止枚举构造函数

我很惊讶,但可以使用C#中的构造函数创建枚举.例如,我有枚举:

public enum Color
{
    White = 1,
    Red = 2
}
Run Code Online (Sandbox Code Playgroud)

然后它可以像这样创建:

var color = new Color();
Run Code Online (Sandbox Code Playgroud)

并且该值将为0,这实际上是无效的枚举值.

那么,我们能以某种方式禁止枚举构造函数吗?任何其他想法如何避免这种情况?

谢谢.

c# enums

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

是否有可能了解mongodb集合的变化?

如果mongodb中的某个集合中的某些内容发生了变化,是否可以获得通知?例如,一些新文档被添加到集合中.是否可以订阅这些更改?是否存在C#的任何实现?谢谢.

c# mongodb

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

为什么IOC容器被认为是减少耦合的一种方法?

我正在考虑在我的项目中使用DI和Unity.我有一个问题:如何减少耦合?从我的观点来看,它是耦合增加,因为:

  1. 我需要创建UnityContainer并在那里注册所有类型.这意味着我需要引用程序集中创建此容器的所有程序集.

    IUnityContainer UnityContainer;
    //....
    IUnityContainer UnityContainer= new UnityContainer();
    UnityContainer.RegisterType<IMyService, CustomerService>();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我需要使用Resolve创建我的服务实例,但这意味着我需要对容器的程序集进行引用.

    var service = SomeClassWithContainer.UnityContainer.Resolve<IMyService>();
    
    Run Code Online (Sandbox Code Playgroud)

我误解了某些东西,或者实际上它是否正在增加耦合?

.net c# dependency-injection unity-container

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