Что если собственность объявлена ​​частной? Как это назвать в C#? - PullRequest
2 голосов
/ 06 марта 2020

Мой вопрос прост: если свойство объявлено как частное - как его вызвать?

В java мы используем getter & setter, в котором переменная является приватной, а в C# свойство public; если я сделаю его приватным, то в основном классе его нельзя будет назвать.

Это мой код:

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

namespace staticProperty
{
    class Class1
    {
        private string name
        {
            get { return name; }
            set { name = value; }
        }
    }
}

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

namespace staticProperty
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 c1 = new Class1();
            c1.????
        }
    }
}

Ответы [ 3 ]

1 голос
/ 06 марта 2020

Вы можете использовать тот же макет, что и Java с

class Class1
{
    private string _name;

    public string getName(){
        return _name;
    }

    //methods to set the private variable anywhere in here.
}

или более кратким

class Class1
{
   public string Name{ get; private set; }
}

В обоих случаях получатель будет опубликован c, но настройка будет быть личным.

0 голосов
/ 09 марта 2020

Вы можете использовать рефлексию для вызова частного свойства в классе.

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

 class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student();
            PropertyInfo property = stu.GetType().GetProperty("Name", BindingFlags.Instance | BindingFlags.NonPublic);
            property.SetValue(stu,"test1");   //set value
            string value = property.GetValue(stu).ToString();//get value
            Console.WriteLine(value);
            Console.ReadKey();
        }

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

Вывод:

enter image description here

0 голосов
/ 06 марта 2020
private string name;

public string _name
{
    get { return name; }
    set { name = value; }
}

Итак, я понимаю, что свойство похоже на метод получения и оно должно быть опубликовано c.

Вопрос в том, что если я сделаю свойство publi c прямым без переменной, то оно должно быть опубликовано c и рассматривается как класс * publi c или внешний класс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...