什么时候应该在C#中使用struct而不是class?我的概念模型是当项只是值类型的集合时使用结构.一种逻辑上将它们组合在一起形成一个有凝聚力的整体的方法.
我在这里遇到了这些规则:
这些规则有效吗?结构在语义上意味着什么?
.NET中struct和class之间有什么区别?
使用new运算符创建类的实例时,将在堆上分配内存.当您使用new运算符创建结构的实例时,在堆上还是堆栈上分配内存?
我即将在代码中创建100,000个对象.它们很小,只有2或3个属性.我将它们放在一个通用列表中,当它们存在时,我将循环它们并检查值a并可能更新值b.
将这些对象创建为类还是结构更快/更好?
编辑
一个.属性是值类型(我认为字符串除外?)
湾 他们可能(我们还不确定)有一个验证方法
编辑2
我想知道:堆上的对象和堆栈是否由垃圾收集器同等处理,或者它的工作方式有何不同?
我需要一个两列列表,如:
List<int,string> mylist= new List<int,string>();
Run Code Online (Sandbox Code Playgroud)
它说
使用泛型类型
System.collection.generic.List<T>需要1个类型参数.
什么时候应该有人在C++中使用结构而不是类,反之亦然?当一个完整的类管理一些信息似乎有点过分,但我想发现自己使用结构,但是想表明所包含的信息都是相关的.我想知道什么是一个好的指导方针,能够分辨哪一个比另一个更合适?
编辑:在阅读材料时发现这些链接在提交问题后,指示的Stack Overflow是相关的:
有没有关于使用结构作为WCF服务的返回类型的官方建议?
我目前正在与一项我没有写过的服务进行互动,并发现自己受到启发,要求查看我的烦恼是否合理.
我过去总是使用类 - 可能部分是因为这是样本总是显示的,但正如我现在想的那样,出于其他"直观"的原因:
我通过定义一个单独的项目来开始合同样式,该项目的接口表示服务来回传递的类型.
我使用LINQ很多,因此对于可空性的测试是隐含的引用类型,而对于结构和其他值类型,我总是需要标记为可空.
虽然我承认它比我脑子里的项目符号列表更直观,但有些东西会马上来找我.我想问这个问题,因为我正在处理一个返回结构的服务,并且在处理返回值时必须写:
var foo = Bar.Value.MyField;
Run Code Online (Sandbox Code Playgroud)
代替
var foo = Bar.Value;
Run Code Online (Sandbox Code Playgroud) 在诸如此类的情况下,在结构上使用类是否有任何优势?(注意:它只会保存变量,永远不会有函数)
class Foo {
private:
struct Pos { int x, y, z };
public:
Pos Position;
};
Run Code Online (Sandbox Code Playgroud)
与:
struct Foo {
struct Pos { int x, y, z } Pos;
};
Run Code Online (Sandbox Code Playgroud)
类似的问题:
MSDN说,一个16字节或更少的类将更好地作为结构[引用]处理.
这是为什么?
这是否意味着如果一个结构超过16个字节,它的效率低于一个类或它是否相同?
你如何确定你的班级是否在16字节以下?
是什么限制了结构体像一个类一样?(除了禁止无参数构造函数)
假设我有一个对象列表,我正在从列表中提取和修改项目,如下所示:
List<MyObject> TheListOfObjects = new List<MyObject>();
MyObject TheObject = new MyObject();
TheListOfObjects = //some json deserialization result
TheObject = (from o in TheListOfObject
where o.ID == SomeParameter
select o).SingleOrDefault();
TheObject.SomeProperty = SomeValue;
Run Code Online (Sandbox Code Playgroud)
当我写作TheObject.SomeProperty = SomeValue;时,我:
在boost 属性树的文档中,有一个正确使用的示例,在此处或在包中给出 libs/property_tree/examples/debug_settings.cpp.
我想知道的是关于这struct debug_settings条线.为什么要把它作为结构而不是类?它甚至有两个成员函数,load(...)和save(...).我认为提升作者有充分的理由这样做,并且它与...效率有某种关系,即使结构和类在"技术上"相同?
从列出的版权年份,我可以猜测这可能是C++ 98,C++ 03或C++ 0x,因此使用结构而不是类的原因至少来自于前C++ 11观点.
// ----------------------------------------------------------------------------
// Copyright (C) 2002-2006 Marcin Kalicinski
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// For more information, see www.boost.org
// ----------------------------------------------------------------------------
//[debug_settings_includes
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/foreach.hpp>
#include <string>
#include <set>
#include <exception>
#include <iostream>
namespace pt = …Run Code Online (Sandbox Code Playgroud)