Создайте конструктор для структуры и используйте его с объектом структуры c# - PullRequest
1 голос
/ 26 января 2020
    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");            
        }      
    }

// Я получаю сообщение об ошибке: структура Employee не содержит конструктора, который принимает 3 аргумента // Идентификатор имени не существует в текущем контексте // Employee: имена членов не могут совпадать с типом включения

Ответы [ 3 ]

2 голосов
/ 26 января 2020

конструктор не имеет возвращаемого значения.

public Employee(int number, string firsname, string lasname)
2 голосов
/ 26 января 2020

В вашей структуре 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 или использовать свойства только для чтения вместо этого, только с получателями, инициализируется в конструкторе

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

В противном случае ваш struct является изменяемым Также он содержит значения ссылочного типа, такие как string. Лучше ввести класс Employee, чем структуру

0 голосов
/ 26 января 2020

Что ж, похоже, что нужно определить нового члена stati c, а затем вызвать этого нового, так что вскоре будет запущен конструктор stati c.

Давайте проверим это:

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

Надеюсь, это поможет. Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...