Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
0 / 0 / 1
Регистрация: 26.04.2020
Сообщений: 173

Как вызвать класс с параметрами string из другого класса?

10.09.2020, 22:46. Показов 5654. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

Подскажите как в таком случае вызвать класс Class из метода Main ?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 public class Class 
    {
        public string Name;
        public string FirstName;
        public string LastName;
 
        public string name = "Имя";
        public string firstName= "Фамилия";
        public string lastName = "Отчество";
 
        public Class (string name, string firstName, string lastName)
        {
            Name = name;
            FirstName = firstName;
            LastName = lastName;
        }   
    }
    class Program 
    {       
        static void Main(string[] args)
        {
 
          как вызвать ??
 
        }
     }
Пробую через Class cl = new Class()
Но пишет что нужно передать параметры. Как их передать с типом string?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.09.2020, 22:46
Ответы с готовыми решениями:

Как вызвать updateGL() из другого класса?
Есть два класса Draw(наследует от QGLWidget) и Calc(наследует QWidget) в разных файлах. Создал виджет, на него всунул еще один и через...

Как вызвать метод из другого класса
Есть класс Player, в нем есть метод "Shoot", как из него вызвать метод BCheck из класса "HUDController"? Просто мне нужно обновить...

Как вызвать метод из другого класса?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

14
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
10.09.2020, 23:01
Цитата Сообщение от Baktery Посмотреть сообщение
Но пишет что нужно передать параметры. Как их передать с типом string?
точно также как и с другим типом))

C#
1
var c = new Class("name", "firstName", "lastName");
1
0 / 0 / 1
Регистрация: 26.04.2020
Сообщений: 173
11.09.2020, 11:34  [ТС]
FateOri,

Понял, спасибо
А зачем в таком случае передают параметры в класс, если допустим чтоб присвоить что-нибуть полю, пишут:

C#
1
2
var c = new Class("name", "firstName", "lastName");
c.Name = "Имя";
То что передано в параметрах, можно как-то использовать, или присвоить полям?
0
0 / 0 / 0
Регистрация: 04.09.2020
Сообщений: 10
11.09.2020, 11:45
Write a program that gets a natural number N (n 1000 1000) in the input, then a sequence N consisting of integer elements. As a result, the program should work out the sequence in reverse order. Use an array to solve the problem.
0
21 / 20 / 3
Регистрация: 08.12.2012
Сообщений: 92
11.09.2020, 12:22
Это просто разные способы передачи данных в экземпляр класса.

Так в экземпляр передаётся несколько значений через конструктор (блок кода в 11 строке первого поста):
C#
1
var c = new Class("name", "firstName", "lastName");
В этом конструкторе уже написан код для присвоения значений полям.

Можно присваивать значения напрямую:
C#
1
c.Name = "Имя";
В основном через конструктор передают параметры, без которых экземпляр класса будет работать неправильно. Если параметр не обязателен для корректной работы, его можно заполнить просто через поле или свойство.
0
0 / 0 / 1
Регистрация: 26.04.2020
Сообщений: 173
11.09.2020, 12:39  [ТС]
Crash94,

Ок, ну если хочу присвоить свойствам те поля, который переданы в параметры класса, те что были проинициализированы в конструкторе ранее, как это сделать?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    public class Student 
    {
        public int a;
        public int b;
        public int c;
        public string name;
        public string firstName;
        public string lastName;
 
        public Student(int a, int b, int c)
        {
            a = 2;
            b = 3;
            c = 4;
        }
        public Student(string name, string firstName, string lastName)
        {
            name = "Имя";
            firstName = "Фамилия";
            lastName = "Отчество"; 
        }
    }
    
    class Program 
    {       
        static void Main(string[] args)
        {
            Student name1 = new Student("Василий", "МояФамилия", "И-Отчество");
            name1.name =  ?????
      
        }       
    }
Так возможно?
Чтоб допустим не присваивать на прямую c.Name = "Имя";
0
21 / 20 / 3
Регистрация: 08.12.2012
Сообщений: 92
11.09.2020, 12:47
Код в конструкторе неправильный. Передаваемые параметры - это и есть значения, которые нужно записать в переменные. А сейчас передаваемые параметры просто игнорируются и в переменные класса всегда записывается "Имя", "Фамилия" и "Отчество".
То есть это:
C#
1
2
3
4
5
6
        public Student(string name, string firstName, string lastName)
        {
            name = "Имя";
            firstName = "Фамилия";
            lastName = "Отчество"; 
        }
Нужно заменить на это:
C#
1
2
3
4
5
6
        public Student(string name, string firstName, string lastName)
        {
            this.name = name;
            this.firstName = firstName;
            this.lastName = lastName; 
        }
Если значение потом нужно будет поменять, то да, это можно сделать так:
C#
1
c.name = "Имя"
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
11.09.2020, 12:50
Baktery, нужно различать поля и свойства. Поля - закрытые, свойства - открытые. Поля используются для внутреннего изменения состояния объекта, поэтому они задаются через параметры конструктора и больше нигде, кроме как внутри класса не используются. Свойства же - это открытые "поля", которые могут меняться из вне класса.
Например. Объект - шар. Открытые свойства - цвет, поле - радиус. Улавливаете смысл ?
0
0 / 0 / 1
Регистрация: 26.04.2020
Сообщений: 173
11.09.2020, 13:25  [ТС]
Кажется я понял логику..
То есть можно без конструктора, просто присвоить публичным полям значения, и использовать их далее в классах. Или присвоить их же через конструктор (и проинициализировать).
И при создании объекта параметры класса должны быть такими же как и те проинициализированные поля в конструкторе.

Вот например:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
        public int a;
        public int b;
        public int c;
        public string Name;
        public string FirstName;
        public string LastName;
        public string RealName;
        public string RealLastName;
        public string RealFirstName;
 
        public Student(int a, int b, int c)
        {
            a = 2;
            b = 3;
            c = 4;
        }
        public Student(string Имя, string Фамилия, string Отчество)
        {
            this.Name = Имя;
            this.FirstName = Фамилия;
            this.LastName = Отчество; 
        }
    }
    
    class Program 
    {       
        static void Main(string[] args)
        {
            Student name1 = new Student("Имя", "Фамилия", "Отчество");
            name1.Name = name1.Name;
            name1.RealName = "Мое реальное имя";
 
            Student ball = new Student(2, 3, 4);
            ball.a = ball.a;
            int q = name1.a + 5;
 
            Console.WriteLine(name1.Name+ ": " + name1.RealName +"\nБал по умолчанию: " + ball.a + " Начисляемый бал "+ q);
            Console.ReadKey();
        }
А в чем тогда кроется суть использования конструктора, как я понял он не принципиален для использования?
Еще вопрос, в параметры объекта передал значения типа данных int "те что в конструкторе public Student(int a, int b, int c)", но в Console.WriteLine, в результате бал по умолчанию показывает 0 в место 2 (то что было проинициализированные в конструкторе). Ведь данные int заданные в конструктор тоже должны передаваться в объект класса?
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
11.09.2020, 13:32
Цитата Сообщение от Baktery Посмотреть сообщение
А в чем тогда кроется суть использования конструктора
Задать первоначальное состояние объекта
А это что за дичь?
C#
1
ball.a = ball.a;
0
0 / 0 / 1
Регистрация: 26.04.2020
Сообщений: 173
11.09.2020, 13:33  [ТС]
Почтальон,

А разве не на оборот? Поля могут быть открытыми (с модификатором доступа public), а свойства закрытые, для внутреннего изменения состояния объекта?

C#
1
2
3
4
public string Name ="Имя"; // - поле
 
Student student1 = new Student ();
tudent1.Name = "Имя";                   // - свойство
Не так?
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
11.09.2020, 13:34
Цитата Сообщение от Baktery Посмотреть сообщение
Поля могут быть открытыми (с модификатором доступа public), а свойства закрытые, для внутреннего изменения состояния объекта?
Нет, поля - это закрытые (пережиток прошлого). Сейчас в основном используют свойства с разными модификаторами сеттеров
0
0 / 0 / 1
Регистрация: 26.04.2020
Сообщений: 173
11.09.2020, 13:36  [ТС]
Почтальон,

ball.a = ball.a;
..вот собственно так хотел присвоить первоначальное состояние объекта. Понял что не правильно, в место первоначального получаю 0. Подскажите как правильно?
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
11.09.2020, 13:51
на коленке:
C#
1
2
3
4
5
6
7
8
9
10
11
private string name;
public string Name
{
   get {return name; }
}
 
// конструктор
public SomeClass(string name)
{
   this.name = name;
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
11.09.2020, 13:51
Цитата Сообщение от Baktery Посмотреть сообщение
Подскажите как в таком случае вызвать класс Class из метода Main ?
Кривая реализация из-за которой вы путаете самого себя.

Пример реализация иммутабельного типа
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    /// <summary>Класс со всеми иммутабельными свойствами.<br/>
    /// Поля нельзя делать ПУБЛИЧНЫМИ !!! - это атавизм от раних версий C#.</summary>
    /// <remarks>Для иммутабельных типов очень часто реализуют сравнение
    /// по значению в интерфейсе  IEqualityComparer&lt;T>&gt;.<br/>
    /// При его реализации также ОЧЕНЬ желательно переопределять <br/>
    /// методы Equals(object obj) и GetHashCode(). <br/>
    /// Это очень быстро делается в "Быстрых Решениях".</remarks>
    public class Person : IEquatable<Person>
    {
        /// <summary>Свойство Только для Чтения не имеет сеттера.
        /// И его значение можно задать только в конструторе.</summary>
        public string FirstName { get; }
        public string LastName { get; }
        public string SecondName { get; }
 
        /// <summary>Конструктор необходим поскольку,
        /// только в нём можно задать значения свойствам.</summary>
        public Person(string firstName, string lastName, string secondName)
        {
            FirstName = firstName;
            LastName = lastName;
            SecondName = secondName;
        }
 
        public override bool Equals(object obj)
            => Equals(obj as Person);
 
        public override int GetHashCode()
        {
            // Код вставлен Студией
            int hashCode = 1840957538;
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(SecondName);
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(FirstName);
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(LastName);
            return hashCode;
        }
 
        // Код вставлен Студией в метод Equals(object obj) и перетащен сюда.
        public bool Equals(Person person)
            => person != null &&
                   SecondName == person.SecondName &&
                   FirstName == person.FirstName &&
                   LastName == person.LastName;
 
    }
C#
1
2
3
4
5
6
7
8
9
10
       static void Main(string[] args)
       {
          Person person = new Person("Имя", "Фамилия", "Отчество");
          person.FirstName  = "Ваня"; // Ошибка - после создания экземпляра  свойство изменить нельзя!
 
 
          Person other = new Person("Имя", "Фамилия", "Отчество");
 
          Console.WriteLine(person.Equals(other)); // Вывод: true
        }

Изменяемый тип. В таких типах реализация сравнения по значению - лишена смысла.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public class Person 
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string SecondName { get; set; }
 
        /// <summary>Конструкторы задаются для упрощения.<br/>
        /// И если задан хоть один конструктор с параметрами, желательно, <br/>
        /// задавать и конструктор без параметров - "Конструктор по умолчанию".</summary>
        public Person(string firstName, string lastName, string secondName)
        {
            FirstName = firstName;
            LastName = lastName;
            SecondName = secondName;
        }
        /// <summary>Конструктор по умолчанию.</summary>
        public Person(){}
 
 
    }
C#
1
2
3
4
5
6
7
8
    Person person = new Person("Имя", "Фамилия", "Отчество");
    person.FirstName = "Ваня"; // Можно задать
 
    // Можно использовать инициализатор свойств
    Person other = new Person()
    { FirstName = "Ваня", LastName = "Фамилия", SecondName = "Отчество"};
 
      Console.WriteLine(person.Equals(other)); // Вывод: false
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.09.2020, 13:51
Помогаю со студенческими работами здесь

Как вызвать форму из другого класса
Т.е. есть один класс, в нем Myform mf = new Myform(); ... А в другом классе я хочу скажем какие-нить действия с этим инстансом...

Как верно вызвать метод другого класса?
Есть код на Java, не понимаю как верно его реализовать на Python, интересует только реализация вызова метода класса А из объекта класса b: ...

Как вызвать на исполнение функцию из другого класса
Доброго времени суток господа программисты ! Вопрос вот в чём ! Есть форма приложения и вспомогательный класс ! Необходимо обратиться к...

Как вызвать в Main метод из другого класса?
Задачка на среднее арифметическое. Создал класс &quot;Array&quot;, в котором происходит заполнение массива числами, затем числа из массива и...

Как вызвать значение переменной из другого класса?
у меня есть следующий код: class London { public void Start(){ int k; k = int.Parse(Console.ReadLine()); }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru