#c#
Вопрос:
Я хочу вернуть объект типа Period
, когда моя диалоговая форма (приложение Windows form) закроется.
Я знаю, что вы можете создавать простые свойства string
int
или что-то подобное, к которым можно получить доступ, form.property
когда появится результат OK
. Дело в том , что Period
состоит из а List
, двух DateTime
, а string
и трех decimal
свойств.
Если я попытаюсь создать Period
свойство, я получу сообщение об ошибке CS0053 Inconsistent accessibility: property type 'Period' is less accessible than property 'NewPeriod.Period'
. Но я на самом деле не верю, что мне нужно возвращать этот объект по частям и создавать свойство для каждого отдельного свойства Period
.
Также при попытке создать List<Entry>
свойство я получаю ту же CS0053
ошибку, хотя и с Entry
вместо Period
. Entry
состоит из четырех string
, одного double
и одного DateTime
объекта недвижимости.
Вот моя сокращенная диалоговая форма:
public partial class NewPeriod : Form
{
public Period Period { get; set; }
private void btn_ok_Click(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("OK");
Period = behind.AddPeriod(dtp_begin.Value, dtp_end.Value, num_invoiceAmount.Value);
}
}
Это Period
класс модели:
class Period
{
public List<Entry> Entries { get; set; }
public DateTime Begin { get; set; }
public DateTime End { get; set; }
public string Name { get; set; }
public decimal ServerInvoiceAmount { get; set; }
public decimal SplitCostAmount { get; set; }
public decimal DonationAmount { get; set; }
}
Я хочу использовать результат таким образом:
var newPeriodForm = new NewPeriod();
var result = newPeriodForm.ShowDialog();
if(result == DialogResult.OK)
{
periods.Add(newPeriodForm.Period);
}
Это первый раз, когда я пишу что-то на C# полностью самостоятельно, и я не смог найти ничего, кроме возврата простых свойств во время исследования.
Комментарии:
1. «Я хочу использовать результат таким образом». Есть ли причина, по которой вы не можете использовать результат таким образом? Я имею в виду, это должно сработать.
2. @LasseV.Karlsen да, как я уже писал, я получаю сообщение об ошибке. Но, как отметил Кай Джард, мой
Period
класс не является публичным
Ответ №1:
Посмотрите, где вы написали
class Period
Напишите это вместо этого:
public class Period
Опущение слова «общедоступный» означает, что по умолчанию он имеет значение «внутренний», что, в свою очередь, означает, что вы не можете сделать из него общедоступное свойство, потому что «внутренний» не такой «широко видимый» уровень доступа, как «общедоступный». Вы можете понизить доступность (сделать что — то «менее заметным»), Но вы не можете обновить его-если бы класс был общедоступным, ваша собственность могла бы быть внутренней, защищенной, частной и т. Д., Но не наоборот.
Как новый разработчик, если вы не уверены, что добавить, просто сделайте все свои классы общедоступными. В конце концов вы начнете использовать другие уровни доступа (в разных местах), когда возникнут ситуации, когда вам понадобится это средство, но прямо сейчас я бы сказал, что избавьте себя от головной боли, связанной с тайными сообщениями компилятора, и используйте public для классов и свойств, а private для полей
Комментарии:
1. Спасибо! Я полностью проигнорировал тот факт, что классы public/private/и т. Д… Я родом из java, и там все классы по умолчанию являются общедоступными, если вы создадите новый.
2. О … Я думал, что java чем-то похожа на C# (закрытый пакет, который похож на внутренний C#).. Добро пожаловать в C#!
3. это похоже на java, вам просто не нужно думать об этом, потому что ваша среда разработки автоматически делает класс общедоступным. Спасибо!