C# 在C中作为委托参数传递结构或类#
代码A:C# 在C中作为委托参数传递结构或类#,c#,.net,class,struct,C#,.net,Class,Struct,代码A: 公共类测试 { public struct TestValueArgs//struct通过浅拷贝传递 { 公共静态只读TestValueArgs Empty=新TestValueArgs(/*默认参数*/); 公共只读字符串名称; 公共只读int电话; 公共只读文件是活动的; 公共只读SomeClass用户信息; 公共只读测试发送器; //省略构造函数 } 公共事件行动一个或多个; } 代码B: public class Test { public struct TestVa
公共类测试
{
public struct TestValueArgs//struct通过浅拷贝传递
{
公共静态只读TestValueArgs Empty=新TestValueArgs(/*默认参数*/);
公共只读字符串名称;
公共只读int电话;
公共只读文件是活动的;
公共只读SomeClass用户信息;
公共只读测试发送器;
//省略构造函数
}
公共事件行动一个或多个;
}
代码B:
public class Test
{
public struct TestValueArgs // struct passed by shallow copy
{
public static readonly TestValueArgs Empty = new TestValueArgs(/*default parameters*/);
public readonly string name;
public readonly int phone;
public readonly bool isActive;
public readonly SomeClass userInfo;
public readonly Test sender;
// constructor omitted
}
public event Action<TestValueArgs> OnEventTriggered;
}
公共类测试
{
公共类TestClassArgs//class通过指针值传递
{
公共静态只读TestClassArgs Empty=新TestClassArgs(/*默认参数*/);
公共只读字符串名称;
公共只读int电话;
公共只读文件是活动的;
公共只读SomeClass用户信息;
公共只读测试发送器;
//省略构造函数
}
公共事件行动一个或多个;
}
代码C:
public class Test
{
public class TestClassArgs // class passed by pointer value
{
public static readonly TestClassArgs Empty = new TestClassArgs (/*default parameters*/);
public readonly string name;
public readonly int phone;
public readonly bool isActive;
public readonly SomeClass userInfo;
public readonly Test sender;
// constructor omitted
}
public event Action<TestClassArgs> OnEventTriggered;
}
公共类测试
{
公共类TestReuseArgs//可重用
{
public static readonly TestReuseArgs Empty=新的TestReuseArgs(/*默认参数*/);
私有静态只读TestReuseArgs实例=新的TestReuseArgs(/*默认参数*/);
公共静态TestReuseArgs创建(/*参数*/)//必要时实现对象池系统
{
/*
覆盖现有实例
Instance.name=。。。;
Instance.phone=。。。;
...
*/
返回实例;
}
私有字符串名称;
私人int电话;
私人住宅是活跃的;
私有类用户信息;
专用测试发送器;
//消气剂性质省略
//构造函数已弃用
}
公共事件行动一个或多个;
}
现在,基于上面的代码块,我确实有一些问题:
我会小心地把时间花在这样的事情上。如果您想知道引擎盖下发生了什么以及事情是如何工作的,这很好,但是除非您真的需要提高代码的所有性能,否则只需创建类并使用只读属性即可。我怀疑你是否能测量出这种差异。但这只是MHO:)
public class Test
{
public class TestReuseArgs // reusable
{
public static readonly TestReuseArgs Empty = new TestReuseArgs (/*default parameters*/);
private static readonly TestReuseArgs Instance = new TestReuseArgs (/*default parameters*/);
public static TestReuseArgs Create(/*parameters*/) // implement a object pooling system if necessary
{
/*
overwrite existing Instance
Instance.name = ...;
Instance.phone = ...;
...
*/
return Instance;
}
private string name;
private int phone;
private bool isActive;
private SomeClass userInfo;
private Test sender;
// getter properties omitted
// constructor deprecated
}
public event Action<TestReuseArgs> OnEventTriggered;
}