相关疑难解决方法(0)

为什么可变结构"邪恶"?

在这里讨论了SO之后,我已经多次读过可变结构是"邪恶"的评论(就像这个问题的答案一样).

C#中可变性和结构的实际问题是什么?

c# struct mutable immutability

470
推荐指数
15
解决办法
7万
查看次数

为什么这个结构是可变的可以吗?什么时候可变结构可以接受?

Eric Lippert告诉我,我应该"尝试始终使值类型不可变",所以我认为我应该尝试始终使值类型不可变.

但是,我刚刚System.Web.Util.SimpleBitVector32System.Web程序集中找到了这个内部可变结构,这让我觉得必须有一个很好的理由来拥有一个可变结构.我猜他们这样做的原因是因为它在测试中表现得更好,而且他们把它保持在内部以阻止它的误用.然而,这是猜测.

我已经C&P了这个结构的来源.什么是设计决定使用可变结构的合理性?一般来说,这种方法可以获得什么样的好处,什么时候这些好处足以证明潜在的损害?

[Serializable, StructLayout(LayoutKind.Sequential)]
internal struct SimpleBitVector32
{
    private int data;
    internal SimpleBitVector32(int data)
    {
        this.data = data;
    }

    internal int IntegerValue
    {
        get { return this.data; }
        set { this.data = value; }
    }

    internal bool this[int bit]
    {
        get { 
            return ((this.data & bit) == bit); 
        }
        set {
            int data = this.data;
            if (value) this.data = data | bit;
            else this.data = data & ~bit;
        }
    }

    internal int this[int …
Run Code Online (Sandbox Code Playgroud)

.net c# performance struct immutability

35
推荐指数
3
解决办法
3202
查看次数

流畅的界面是否会显着影响.NET应用程序的运行时性能?

我目前正忙着为现有技术实现流畅的界面,这将允许类似于以下代码段的代码:

using (var directory = Open.Directory(@"path\to\some\directory"))
{
    using (var file = Open.File("foobar.html").In(directory))
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

为了实现这样的构造,需要使用类来累积参数并将它们传递给其他对象.例如,要实现Open.File(...).In(...)构造,您需要两个类:

// handles 'Open.XXX':
public static class OpenPhrase
{
    // handles 'Open.File(XXX)':
    public static OpenFilePhrase File(string filename)
    {
        return new OpenFilePhrase(filename);
    }

    // handles 'Open.Directory(XXX)':
    public static DirectoryObject Directory(string path)
    {
        // ...
    }
}

// handles 'Open.File(XXX).XXX':
public class OpenFilePhrase
{
    internal OpenFilePhrase(string filename)
    {
        _filename = filename
    }

    // handles 'Open.File(XXX).In(XXX):
    public FileObject In(DirectoryObject directory)
    {
        // ...
    } …
Run Code Online (Sandbox Code Playgroud)

.net performance garbage-collection fluent-interface runtime

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