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
希望这能有所帮助。干杯!