Является ли это эффективным и лучше ли использовать инкапсуляцию?

Вот код. Пожалуйста, см. Мои вопросы внизу этого сообщения.

public partial class myClass : Other.Class
    {
        long check1parameter = CurrentSession.CurrentFile.ID;

        protected override void EnquiryLoaded(object sender, System.EventArgs e) 
        {
            disableFields();
        }
        private void disableFields() 
        {
            if (checkEverything()) {
                EnquiryForm.GetControl("Status").Enabled = true;
            }
        }

        public bool check1_method(long check1parameter) {
            bool Check1 = false;
            string stringToCheck = check1parameter.ToString();
            if (stringToCheck.Contains("something")) {
                    Check1 = true;
                }
            return Check1;
        }

        public bool checkEverything() {
            bool roleCheck = CurrentSession.CurrentUser.IsInRoles("RequiredRole");
            bool check1 = check1_method(check1parameter);
            bool checkEverything = false;
            if (roleCheck && check1) {
                checkEverything = true;
            } 
            return checkEverything;
        }
        //other methods
    }

Код должен проверить, что кто-то имеет роль, а также что строка содержит немного информации, а затем отключить поле. Я упростил это из фактического кода, чтобы наметить ключевые моменты. Хотя намерение состоит только в том, чтобы запускать эти простые проверки и отключать поле, я подумал, что лучше всего создавать отдельные методы для этих задач, чтобы впоследствии их можно было расширить.

Я получаю ошибку ссылки объекта с long check1parameterопределением в этой позиции. Он был включен check1_method()и работал правильно, но это то, что я хотел бы объявить один раз и использовать по нескольким областям, если это возможно.

Я также хочу передать параметры variables, check1_methodа не объявлять их внутри него. Каков наилучший способ сделать check1parameterдоступным для всех методов в этом частичном классе? Это относится к другому классу, который Other.Classкаким-то образом связан .

Мой главный вопрос: как я могу сделать это максимально эффективным, и я должен использовать privateего publicгде-нибудь здесь? Я все еще очень новичок в C # и еще не совсем понял инкапсуляцию, поэтому, пожалуйста, успокойся! :)

c#,encapsulation,

0

Ответов: 2


1 принят

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

При использовании простого оператора if их можно удалить, например, вы могли бы написать:

public partial class myClass : Other.Class
    {
        long check1parameter = CurrentSession.CurrentFile.ID;

        protected override void EnquiryLoaded(object sender, System.EventArgs e) 
        {
            disableFields();
        }
        private void disableFields() 
        {
            EnquiryForm.GetControl("Status").Enabled = checkEverything();
        }

        public bool check1_method(long check1parameter) {
            return check1parameter.ToString().Contains("something");
        }

        public bool checkEverything() {
            bool roleCheck = CurrentSession.CurrentUser.IsInRoles("RequiredRole");
            bool check1 = check1_method(check1parameter);

            return (roleCheck && check1);
        }
        //other methods
    }

Чтобы спасти себя от объявления ненужных болтов. Помимо этого вы жертвуете удобочитаемостью для меньшего количества строк.

Когда дело доходит до public vs private, хорошей практикой всегда следует указывать конфиденциальность, если вам не нужен доступ к ней за пределами класса. На первый взгляд, disableFields()вероятно , должно быть публично, check1_method()и checkEverything()быть закрытым.

EDIT: Кроме того, если check1parameterсоздается глобально глобально myClass, тогда вам не нужно передавать его в качестве параметра дляcheck1_methods()


1

Код, который вы указали, выглядит нормально. Я сделал пару изменений, в основном, эстетику кода. Главное - сделать 2 метода проверки в свойствах.

public partial class myClass : Other.Class
{
    long check1parameter = CurrentSession.CurrentFile.ID;

    protected override void EnquiryLoaded(object sender, System.EventArgs e)
    {
        disableFields();
    }

    private void disableFields()
    {
        if (checkEverything)
        {
            EnquiryForm.GetControl("Status").Enabled = true;
        }
    }

    // the parameter name was the same as a variable in the class
    // renamed to avoid confusion
    public bool check1_method
    {
        get {return check1parameter.ToString().Contains("something");}
    }

    public bool checkEverything
    {
        get { return CurrentSession.CurrentUser.IsInRoles("RequiredRole") 
            && check1_method; }
    }
    //other methods
}
C #, инкапсуляция,
Похожие вопросы