我不确定是使用可变结构还是可变类.我的程序存储了一个包含大量对象的数组.我注意到使用类会使所需的内存量翻倍.但是,我希望这些对象是可变的,并且我被告知使用可变结构是邪恶的.这就是我的类型:
struct /* or class */ Block
{
public byte ID;
public bool HasMetaData; // not sure whether HasMetaData == false or
// MetaData == null is faster, might remove this
public BlockMetaData MetaData; // BlockMetaData is always a class reference
}
Run Code Online (Sandbox Code Playgroud)
像这样分配大量的对象(注意下面的两个代码都运行了81次):
// struct
Block[,,] blocks = new Block[16, 256, 16];
Run Code Online (Sandbox Code Playgroud)
使用大约35 MiB的内存,同时这样做:
// class
Block[,,] blocks = new Block[16, 256, 16];
for (int z = 0; z < 16; z++)
for (int y = 0; y < 256; …Run Code Online (Sandbox Code Playgroud) 可能重复:
非常简单的代表沉思
我一直在想这种定义委托的方法有什么区别
System.Action act;
act = MethodWithoutParameters;
Run Code Online (Sandbox Code Playgroud)
还有这个
System.Action act;
act = new System.Action(MethodWithoutParameters);
Run Code Online (Sandbox Code Playgroud)
.我应该更喜欢一个吗?如果是这样,为什么?遗憾的是,我无法找到有关我的问题的更多信息.如果有人能告诉我这两段代码之间的差异,我真的很感激.
我正在尝试创建一个程序,一旦将新数据写入FileStream对象,就会调用一个动作.我目前的做法如下:
public class BlockingFileStream : FileStream
{
public override int Read(byte[] array, int offset, int count)
{
while (Position == Length) ;
return base.Read(array, offset, count);
}
public override int ReadByte()
{
while (Position == Length) ;
return base.ReadByte();
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,所有这一类都要等到流的长度大于其当前位置.它似乎工作,但是,我一直想知道是否有更好的方法来做到这一点.所以我的问题是:
有没有更好的方法来执行上面发布的代码剪辑中所执行的操作?
我有以下代码:
class Program
{
static void Main(string[] args)
{
Test test = new Test();
object objTest = test;
Console.WriteLine(test.GetType()); // Output: "OperatorOverload.Test"
Console.WriteLine(objTest.GetType()); // Output: "OperatorOverload.Test"
Console.WriteLine(test == null); // Output: "True"
Console.WriteLine(objTest == null); // Output: "False"
test.Equals(null); // Output: "Hi!"
objTest.Equals(null); // Output: "Hi!"
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
测试看起来像这样:
class Test
{
public static bool operator ==(Test obj1, Test obj2)
{
return true;
}
public static bool operator !=(Test obj1, Test obj2)
{
return !(obj1 == obj2);
}
public …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×1
class ×1
definition ×1
delegates ×1
events ×1
filestream ×1
inheritance ×1
memory ×1
mutable ×1
struct ×1