为结构创建构造函数,并将其与结构对象 c# 一起使用


using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp1
{
// I am using structure to define values type set 
public struct Employee
{
public int EmpId;
public string FirstName;
public string LastName;
// Here i am checking whether parameter less constructor will work 
static Employee()
{
Console.WriteLine("First Object Created");
}
// Here i am using one more constructor for initializing it with some values later on
public void Employee(int number, string firsname, string lasname)
{
id = number;
FirstName = firsname;
LastName = lasname;
}    
}    
// Here i am using the parameterize constructor to assign values mentioned before in the //structure
class Program {
Employee emp1 = new Employee(23,"shiva","shankar");            
}      
}

我得到的错误是员工结构不包含需要 3 个参数的构造函数 名称 id 在当前上下文中不存在 员工:成员名称不能与其封闭类型相同

构造函数没有返回值。

public Employee(int number, string firsname, string lasname)

Employee结构中没有id字段,只有EmpId.此外,C# 中的构造函数不能有返回类型:

构造函数是名称与其名称相同的方法 类型。其方法签名仅包括方法名称及其 参数列表;它不包括返回类型。

您应该按如下方式重写代码

// Here i am using one more constructor for initializing it with some values later on
public Employee(int number, string firstName, string lastName)
{
EmpId = number;
FirstName = firstName;
LastName = lastName;
}

此外,将您的字段声明为private或使用只读属性(仅使用 getter(在构造函数中初始化也是有意义的

public int EmpId { get; }
public string FirstName { get; }
public string LastName { get; }

否则,您的struct是可变的。它还包含一个引用类型值,如string.最好引入Employee类而不是结构类

好吧,似乎需要定义一个新的静态成员,然后调用该新成员,因此静态构造函数将很快被触发。

让我们检查一下:

public static int id = 0;
static Employee()
{
Console.WriteLine("First Object Created");
}

第一次通话:

Emploee.id = 1;
Employee emp1 = new Employee(23,"shiva","shankar");
Console.WriteLine("Id: {0}", Employee.id);
Console.WriteLine("emp1.EmpId: {0}", emp1.EmpId);

输出:

First Object Created
Id: 1;
emp1.EmpId: 23

第二次通话:

Employee.id = 2;
// copy emp1 values to var emp2
var emp2 = emp1; // both emp1 and emp2 have same values
// set emp2.EmpId to new value.
emp2.EmpId = 24;
Console.WriteLine("Id: {0}", Employee.id);
Console.WriteLine("emp1.EmpId: {0}", emp1.EmpId);
Console.WriteLine("emp2.EmpId: {0}", emp2.EmpId);

输出:

Id: 2;
emp1.EmpId: 23
emp2.EmpId: 24

希望这能有所帮助。干杯!

最新更新