Tim*_*sen 2 c# static class definition
我目前正在尝试使用BinaryReader读取一些二进制数据.我已经创建了一个帮助程序类来解析这些数据.目前它是一个使用这种方法的静态类:
public static class Parser
{
public static ParseObject1 ReadObject1(BinaryReader reader){...}
public static ParseObject2 ReadObject2(BinaryReader reader{...}
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样使用它:
...
BinaryReader br = new BinaryReader(@"file.ext");
ParseObject1 po1 = Parser.ReadObject1(br);
...
ParseObject1 po2 = Parser.ReadObject2(br);
...
Run Code Online (Sandbox Code Playgroud)
但后来我开始思考,我也可以像这样初始化类
Parser p = new Parser(br);
ParseObject1 po1 = Parser.ReadObject1();
Run Code Online (Sandbox Code Playgroud)
什么是更好的实施.
哪个更快并不是真正相关的; 您的关注点更多是关于并发性和体系结构.
对于将BinaryReader作为参数传递给ReadObject调用的静态Parser类,您将向该方法提供所有数据,并且(可能来自您的示例)不会持久保存有关Reader的任何数据解析器; 这允许您实例化多个BinaryReader对象并分别调用它们的Parser,没有并发或冲突问题.(请注意,只有在Parser对象中没有持久性静态数据时,这才适用.)
另一方面,如果您的Parser传递了BinaryReader对象来进行操作,那么它可能会在其自身内部持有BinaryReader数据; 如果您使用不同的BinaryReader对象对Parser进行交错调用,则可能存在复杂性.
如果你的Parser不需要在ReadObject1和ReadObject2之间保持状态,我建议保持静态,并传入BinaryReader对象引用; 在该实例中保持静态是一个很好的"描述符",即这些调用之间没有数据持续存在.另一方面,如果在Parser中存在关于BinaryReader的数据,我会将其设置为非静态,并传入数据(如第二个示例中所示).使其成为非静态但具有类持久化数据使得它不太可能导致并发问题.
| 归档时间: |
|
| 查看次数: |
283 次 |
| 最近记录: |