доступ к созданному публичному члену закрытого класса

я пытаюсь создать общедоступный класс sealed в своей программе,

дело в том, что ... поскольку я еще новичок C# .net еще не разработчик, я нахожу эту проблему немного сложной ...

Что касается проблемы в вопросе, вы можете сразу перейти к примеру программы или прочитать следующую информацию:

DB_Schema - помощник namespace, который я создал, для работы с доступом к данным.

(он содержит имена tables и SP .. и т. д.)

один из его классов (ниже) имеет дело с Stored Procedures, а этот содержит имена параметров SP

public sealed class SProc
{
    public sealed class GetCPAReport
    {
        public const string RecordNum = "@RecordNum",
                            CPAColumnName = "@CPAColumn_Name",
                            Value = "@value",
                            IsFreelance = "@isFreelance";
    }

}
  • Использование в программе:

в методе доступа к данным через SP

private DataTable Get_RefTable_OfUsersBy(string DepartmetID)
{
    SProc.GetCPAReport SProcGetCpa = SProc.GetCPAReport();
    SP_Params.Add(new SqlParameter(SProcGetCpa.IsFreelance, 1));
}

попытка доступа к одному из членов экземпляра (SProcGetCpa) невозможна, как я пытался.

я мог бы просто сделать класс SProc + это подкласс UpdateCPAReport не sealed и ...

но когда я искал вопрос "можно ли создать экземпляр запечатанного класса?

ну .. ответ Да ... хотя пытаюсь найти информацию об ошибке:

недоступен по ссылке на экземпляр; вместо этого укажите название типа

не дает ни результатов, ни примера доступа к инстанцированному sealed class общедоступному члену, по крайней мере, не для новых арперов .net C #, таких как я

- Обновить

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

вместо

ParListEmployeeUsrs.SP_Params.Add(new SqlParameter(HTSPs.RobTC_CPA_Users_Names_JobPosition.IsFreelance, SelectedDepartmentID));

обновление 2

для будущих тех, кто ищет ответ на эту тему

как предложил наш дорогой друг, здесь, в StackOverflow

если вам нужно сделать короткие наименования для ваших классов, когда вы используете их для текущего проекта:

просто поместите это среди using s вашего проекта

using system...
using restOf.net
//just add your own as follows !

using shortClassName = myHelperNameSpace.MyIncrediblyUnnecessaryLongHelperClassName;

person LoneXcoder    schedule 07.12.2012    source источник


Ответы (1)


GetCPAReport не имеет членов экземпляра. const члены неявно статичны. В C # вы не можете получить доступ к статическим членам через ссылку, как вы сейчас пытаетесь.

Вы просто хотите:

SP_Params.Add(new SqlParameter(SProc.GetCPAReport.IsFreelance, 1));

Лично я бы тоже сделал GetCPAReport статическим классом. Нет смысла создавать его экземпляр, поскольку он просто содержит константы ... поэтому активно предотвращайте его создание.

person Jon Skeet    schedule 07.12.2012
comment
Я думаю, я немного перебрал Excited, из-за использования модификатора sealed мне стало немного скучно со статикой - person LoneXcoder; 07.12.2012
comment
@LoneXcoder Нет, вы должны просто рассматривать их как статические, поскольку они фактически являются, вместо того, чтобы создавать их экземпляры. Также имейте в виду, что статические классы также эффективно изолированы. - person Servy; 07.12.2012
comment
@LoneXcoder: Зачем вам вообще делать их членами instance? Они константы. Скажем так: ожидаете ли вы, что один экземпляр GetCPAReport будет иметь другое значение для IsFreelance из других экземпляров? - person Jon Skeet; 07.12.2012
comment
@JonSkeet, имена здесь переведены на 20 букв или около того (: - person LoneXcoder; 07.12.2012
comment
Например: HTSps.RobTC_CPA_Users_Names_JobPosition_Field = * 5 параметров = пять длинных строк, я их ненавижу (хотя я использую 42 светодиодных экрана) ' - person LoneXcoder; 07.12.2012
comment
@JonSkeet (iv'e обновил мой вопрос), вы думаете, это то, о чем я действительно не должен думать? имена полей / const / properties длинные ... причина ?: иногда, когда у вас их много (слишком много), они отличаются некоторыми дополнительными different словами, чтобы рассказать вам, кто они и что они делают, поэтому я хотел попытаться сохранить краткость, когда использую те, что есть в приложении - person LoneXcoder; 07.12.2012
comment
@LoneXcoder: Это не должно повлиять на ваш дизайн. Если вы действительно хотите сделать вещи короче, вы можете использовать директивы using псевдонимов ... но вы не должны делать что-то членом экземпляра только ради этого. - person Jon Skeet; 07.12.2012
comment
@JonSkeet, спасибо за внимание, мистер SKeet, я волновался, что вы можете подумать, что это какая-то ерунда, и это даже не то, о чем стоит думать, но я действительно забочусь о том, как выглядит код: поиск псевдонимов с использованием директив - person LoneXcoder; 07.12.2012
comment
@JonSkeet but offcorse (:, я знал об операторе using {применяемом с namespace s и .. типами, которые неявно idisplosable convertible Capable! (Не ошибайтесь и думайте, что я хороший ученик ... поскольку я знал о using и о том, что это такое ... только методом проб и ошибок !! (:)}, так как я пытаюсь узнать во время работы (Низкая оплата, но оплачиваемая работа (:) .. кажется, это не та лучшая идея для получения эюкации, а не - прохождение пошагового онлайн-руководства, как если бы я был в колледже) .. это объясняет мое незнание части alias ... - person LoneXcoder; 07.12.2012