#c# #class #argument-passing
#c# #класс #передача аргументов
Вопрос:
Это назначение для класса.
Вот мой код на данный момент.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Proj03
{
class MyClass
{
public string MyClass(bool First, int Last)
{
if (First == true)
{
return "FirstName";
}
else if (Last == 3)
{
return "LastName";
}
}
}
class Program
{
static void Main(string[] args)
{
bool var1 = true;
int var2 = 3;
Console.WriteLine(new MyClass(var1)); //Line 34
Console.WriteLine(new MyClass(var2)); //Line 35
Console.WriteLine("Press any key to terminate.");
Console.ReadKey();
}//end main
}//end class Program
}//end namespace
Проблема, с которой я сталкиваюсь, двоякая:
Во-первых, ошибка в строках 34 и 35 продолжает указывать на то, что в «MyClass» нет конструктора, который принимает один аргумент. Итак, легко сделать вывод, что, вау, мне нужен конструктор, который может принимать один аргумент в классе. Я могу сделать конструктор просто отлично, но сложность заключается в передаче «var1» и «var2». Я считаю, что мне нужно передать по ссылке здесь.
Во-вторых, я считаю, что мне нужно принять во внимание тот факт, что «var1» и «var2» — это разные типы переменных. Я действительно не знаю, что с этим делать. Но главный вопрос этого поста заключается в выяснении первой проблемы.
Ограничение, наложенное на нас инструктором, заключается в том, что нам не разрешается ничего изменять в классе «Program».
Требуемый результат выглядит следующим образом:
Покажите свое имя здесь Покажите свою фамилию здесь Нажмите любую клавишу для завершения.
Комментарии:
1.
public string MyClass(bool First, int Last)
: Конструктор не возвращает значение, так что это не конструктор… И даже как метод, что произойдет, если First = false и Last = 42?2. Вы можете создать два конструктора, один из которых принимает bool, а другой — int.
3. И, если Программа класса была написана вашим инструктором, тогда я буду беспокоиться за вас
4. Вам также нужно будет реализовать
ToString
что-либо значимое для вывода на консоль.5. Ваш инструктор указал пример вывода на консоль?
Ответ №1:
Вы можете решить проблему с отсутствующим конструктором следующим образом:
public MyClass(bool First)
{
// your code here
}
public MyClass(int Last)
{
// your code here
}
Обратите внимание, что тип возвращаемого значения не указан, поскольку конструкторы не возвращают. Это позволит вашим вызовам конструктора успешно выполняться.
Ответ №2:
Я, вероятно, не должен этого делать, но, ну … это то, чего вы пытаетесь достичь?
class MyClass
{
private bool? _first;
private int? _last;
public MyClass(bool first)
{
_first = first;
}
public MyClass(int last)
{
_last = last;
}
public override string ToString()
{
if (_first != null)
return "FirstName";
if (_last != null)
return "LastName";
return String.Empty;
}
}
Комментарии:
1. Итак, когда «var1» передается в MyClass, тот факт, что подчеркивание last является int ? означает, что для него установлено значение null? (и, следовательно, приводит только к возврату «FirstName»)
2. Точно. An
int?
будет инициализирован как null .int?
является синтаксическим сахаром дляNullable<int>
, который представляет собой структуру соint Value
свойством иbool HasValue
свойством._first != null
переводится_first.HasValue
компилятором. Но я только что понял, что, возможно, показал вам вещи, которые вы еще не изучили…3. Проблема с вещами, которые я еще не изучил, заключается в том, что класс, который я сейчас посещаю, является для меня первым курсом C #, что это 9-недельный курс, и он онлайн (плохое планирование с моей стороны). Однако это не тот курс, который я беру для получения степени, а дополнительный курс, который, как я думал, будет больше касаться XNA 4.0, а не Microsoft visual C # (хотя мне тоже нравится C # (пока)).).
Ответ №3:
Проблема возникает из-за того, что у вас есть имя вашего класса и метод с одинаковым именем. Вы не можете этого сделать. Любые свойства или методы в вашем классе не должны вызываться так же, как ваш класс.
Ваша проблема с конструктором связана с вашим вызовом new MyClass(var1)
. Вы не указали конструктор в своем классе. Это будет выглядеть примерно так:
public class MyClass
{
// This is a constructor that takes a parameter.
public MyClass(string myString)
{
}
// This is a constructor that takes 0 parameters.
// This exists if you do not specifically declare a constructor.
public MyClass()
{
}
}
Ответ №4:
То, что вы ищете здесь, называется перегрузкой конструктора. Вы должны создать один конструктор, который принимает a bool
в качестве аргумента, а другой, который принимает an int
.
Это домашнее задание, поэтому я не собираюсь приводить образец. Однако этого должно быть достаточно, чтобы вы начали.
Удачи.
Ответ №5:
Взгляните на необязательные аргументы. Используя их, вы могли бы присвоить аргументам в конструкторе значения по умолчанию (отличные от тех, которые будут отправлены программой). Затем ваша программа может передать любой тип переменной, и не будет выдано никакой ошибки относительно неправильного количества аргументов или типов переменных.
Комментарии:
1. Я не верю, что это возможно решить с помощью необязательных аргументов. В этом случае первые аргументы являются разными типами в двух вызовах. Необязательные аргументы могут отображаться только в конце списка параметров.
2. Кажется, я помню, что мог включать только необязательные аргументы — все еще удовлетворяя «Необязательные аргументы могут отображаться только в конце списка параметров». Мне интересно, определит ли он, какую переменную изменять по типу полученной переменной… Давненько не был на C # 🙂