Переменная String не сохраняет в себя значения (С#)

using System.Linq;
using System.Text;
using System.Collections.Generic;
using System.Threading.Tasks;


namespace ConsoleApp12
{
    class Uchenik
{
    public string imya;
    public string familia;
    public string klass;
}
    class Program   
    {
        static Uchenik GetUchenik()
        {
            Uchenik uchenik = new Uchenik();
            
            uchenik.imya = "Вася";
            uchenik.familia = "Пупкин";
            uchenik.klass = "Второй б";
            
            return uchenik;
        }
        static void Print(Uchenik uchenik)
        {
            Console.WriteLine("Имя ученика");
            Console.WriteLine("Фамилия ученика");
            Console.WriteLine("Класс ученика"); 
        }
        static void Main(string[] args)
        {
            var PerviyUchenik = GetUchenik();
        
            Print (PerviyUchenik);
        }
    }
}


Ответы (3 шт):

Автор решения: Frehzy

Я бы чуток подправил вашу реализацию.

Хотелось-бы отметить - не используйте транслит или написание английских слов на русском в названиях. Это крайне важно для того, чтобы увеличить понимание кода другими программистами. Да и выглядит это гораздо приятнее.

Соглашение о написании кода на C#

Для начала, используйте свойства и конструкторы класса. Так же, не забывайте об использовании модификаторов доступа. Например, если сделать public string Name { get; private set; }, то установить значение можно только внутри самого класса Student. Извне это можно будет сделать с помощью методов.

internal class Student
{
    public string Name { get; set; }

    public string Surname { get; set; }

    public string Class { get; set; }

    public Student() { }

    public Student(string name, string surname, string @class)
    {
        Name = name;
        Surname = surname;
        Class = @class;
    }
}

Свойства Классы Конструкторы

Далее метод создания студента. Так как выше мы создали 2 конструктора, то мы можем воспользоваться следующей записью:

static Student CreateStudent()
{
    //благодаря нашему кастомному конструктору
    var student = new Student("Вася", "Пупкин", "Второй б");
    //или по дефолтному конструктору
    var student2 = new Student()
    {
        Name = "Вася",
        Surname = "Пупкин",
        Class = "Второй б"
    };
    //аналогичной является запись. Просто запись выше чуть короче
    var student3 = new Student();
    student3.Name = "Вася";
    student3.Surname = "Пупкин";
    student3.Class = "Второй б";
    //И возвращаем студента. Они все одинаковые, Поэтому нет разницы, какого возвращать
    return student;
}

Печать. Есть несколько способов. Это лишь парочка из них. Так же есть string.Format, string.Join, StringBuilder и многие-многие другие:

static void Print(Student student)
{
    //несколько способов
    Console.WriteLine($"Имя ученика {student.Name}");
    Console.WriteLine("Фамилия ученика " + student.Surname);
    Console.WriteLine(@"Класс ученика {0}", student.Class);
}

Операции со строками

Но мы можем пойти чуть дальше и не создавать этот метод Print. Возвращаемся в класс Student и добавляем переопределение метода ToString.

internal class Student
{
    public string Name { get; set; }

    public string Surname { get; set; }

    public string Class { get; set; }

    public Student() { }

    public Student(string name, string surname, string @class)
    {
        Name = name;
        Surname = surname;
        Class = @class;
    }

    public override string ToString()
    {
        //"\n" переносит на другую строку
        return $"Имя студента {Name}\n" +
            $"Фамилия студента {Surname}\n" +
            $"Класс {Class}";
    }
}

Переопределение

Таким образом, мы можем сделать следующее:

var student = CreateStudent();
Console.WriteLine(student.ToString());

Но этот способ чуть сложнее.

→ Ссылка
Автор решения: Harry

Переменная сохраняет, вы при выводе не просите это значение показывать :)

static void Print(Uchenik uchenik)
{
    Console.WriteLine("Имя ученика     " + uchenik.imya);
    Console.WriteLine("Фамилия ученика " + uchenik.familia);
    Console.WriteLine("Класс ученика   " + uchenik.klass); 
}
→ Ссылка
Автор решения: c0ol
using System;

namespace ConsoleApp4
{

    class Person
    {
        public string name;
        public string surname; 
        public int education;


        public Person(){}

        public Person(string name, string surname, int education)
        {
            this.name = name;
            this.surname = surname;
            this.education = education;
        }


        public string Name
        {
            get
            {
                return name;    // возвращаем значение свойства
            }
            set
            {
                name = value;   // устанавливаем новое значение свойства
            }
        }

        public string Surname
        {
            get
            {
                return surname;    
            }
            set
            {
                surname = value;   
            }
        }

        public int Education
        {
            get
            {
                return education;    
            }
            set
            {
                education = value;   
            }
        }


        public void Print() => Console.WriteLine($"Name: {name} Surname: {surname} Education: {education}");

    }


    class Program
    {

        static void Main(string[] args)
        {

            Person person = new Person();
            person.Name = "Vasa";
            person.Surname = "Pupkin";
            person.Education = 2;
            person.Print();

            // Можно изменить свойство - Вася перешел в 3-й класс !
            person.Education = 3;
            person.Print();

            // Передать в конструктор с параметрами
            Person john = new Person("John", "Petrov", 5);
            john.Print();

        }
    }
}

Простое описание для нашего дорогого студента:

  1. Использование свойств;
  2. Использование конструктора с параметрами.

Для печати тогда делаем так (в методе Main() ), а Print() для очистки совести:) не используем:

// Получаем значение свойства и присваиваем его переменной
string personName = person.Name;
Console.WriteLine(personName);  // Имя
→ Ссылка