Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于我的类在C中实现的问题#_C# - Fatal编程技术网

C# 关于我的类在C中实现的问题#

C# 关于我的类在C中实现的问题#,c#,C#,目前我有一个只有属性的类 class MyEntity { public string FirstName { get; set; } public string LastName { get; set; } } 在我的另一个类中,我使用 MyEntity objEnt = new MyEntity(); objEnt.FirstName="abc"; objEnt.LastName = "edf"; 我之所以让类MyEntity只包含属性,是为了确保遵守 问题是,这

目前我有一个只有属性的类

class MyEntity
{  
    public string FirstName { get; set; }
    public string LastName  { get; set; } 
}
在我的另一个类中,我使用

MyEntity objEnt = new MyEntity();
objEnt.FirstName="abc";
objEnt.LastName = "edf";
我之所以让类
MyEntity
只包含属性,是为了确保遵守

问题是,这种方法是否正确?我可以有多个MyEntity的实例

我可以使用静态类进行此操作吗?我如何在这方面使用泛型

顺便说一句,这个实现是用C语言实现的#

提前谢谢

干杯

卡尔蒂克
  • 您不能使用静态类,因为您有state。静态类只能由静态成员组成
  • 很难看出您在这里如何使用泛型
  • 就我个人而言,我更喜欢类型在可能的情况下是不可变的——例如,给
    MyEntity
    一个具有两个参数的构造函数,并从属性中删除公共setter。(无论您是在构造函数之外保留您不使用的私有setter,还是移动到“适当的”只读字段和只读属性,都是另一种选择。)然而,这种可变类型对您来说可能是绝对合适的-在不知道您要做什么的情况下是不可能说的

    请注意,在使用可变类型时,可以使用对象初始值设定项简化初始化:

    MyEntity objEnt = new MyEntity { FirstName = "abc", LastName = "edf" };
    

    (如果您使类型不可变,您将在构造函数中传递值。如果您使用的是C#4,您仍然可以通过C#4的“命名参数”功能使用名称。)

    如前所述,这取决于您的需要。 请注意,您不能使用静态类,因为您希望有多个实例,而且在从多个线程访问时可能会出现同步问题


    至于泛型。。。你在这里需要它干什么

    我的答案打了一半,但后来Jon回答了,所以我现在的答案变得毫无意义


    不过,我会对乔恩的回答提出一个对比。在使用不可变对象之前,请仔细考虑—从某些角度来看,它们很好,但如果使用它们绑定到可编辑字段,或者序列化它们(存储或传输,即WCF web服务调用),则很快就会遇到麻烦

    我假设,对于未指定的DTO,这里是泛型的一个快速而肮脏的用法

    class MyEntity<T>
    {
       public T value { get; set; }
    }
    
    类MyEntity
    {
    公共T值{get;set;}
    }
    
    它是否正确完全取决于您试图实现的目标。你的目标是什么?你有一个只有属性的类来确保遵守什么?至于普通的POCO或DTO对象,这很好。。。对于任何其他内容,它取决于实际场景。我有一个db表,我的类将数据插入该表中。在我的示例中,这些字段是MyEntity类的属性。[表结构可能不会更改]您需要该类做什么。。。您是使用某种ORM工具将数据从db映射到.net对象,还是手动编写查询?@Umesh:我想确保输入到我的db@KarthikK:您根本没有显示任何与数据库相关的内容,因此我们无法真正判断该位是否正确。我有一个db表,我的类将数据插入该表中。在我的示例中,这些字段是MyEntity类的属性。[表结构可能不会更改]我可能必须在数据库中插入多行。所以我想如果我有一个MyEntity对象的集合。我希望在MyEntity类中使用列名的原因是表结构是固定的。问题是,这种方法是否正确?还是我应该选择STRUCT?不确定这是否仍然模糊。Jon Skeet可以更改不可变对象。@Karthik:我几乎肯定不会更改为结构。现在还不清楚您真正关心的是什么设计决策。。。到目前为止,这一切听起来都相当合理,但数据访问层比具有两个属性的类要多得多……这并不能有效地替代具有两个属性的原始类。此外,很难看出这一点的有用性。试图使不可变类型可编辑肯定会导致一个问题:)使用不可变类型进行序列化肯定有很多方法——只是内置序列化程序往往会使其变得困难:(例如,协议缓冲区是围绕不可变类型设计的。。。