digiajay Ответов: 1

Как использовать свойство класса В C#?


Я довольно новичок в .NET и изучаю эти вещи. У меня есть класс из библиотеки камер, который дает значение свойства, когда мы вызываем метод GetValue (), как показано ниже.
camera.Parameters[PLCamera.Width].GetValue();
Я не знаю, как это работает. Это PLCamera.Width приведенное в двух квадратных скобках перечисление? Что по существу происходит в этом утверждении? Когда я увидел PLCamera класс, он имеет множество таких свойств. Я хочу создать публичную функцию, которая дает любое свойство, заданное в качестве аргумента.

Что я уже пробовал:

Я попробовал этот код camera.Parameters[PLCamera.Width].GetValue(); и он получает то же самое. PLCamera.Width Я хочу знать, как это по существу работает?

МП библиотеке документов можно найти на Пилон - Google Диск[^]

Kenneth Haugland

Вы уверены, что это не свойства зависимости?
https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-properties-overview

digiajay

Может быть, это свойства зависимости. Давайте посмотрим, как работают свойства зависимостей. Спасибо за предложение.!

Kenneth Haugland

Однако они используются только в приложениях WPF.

1 Ответов

Рейтинг:
0

OriginalGriff

Не глядя на исходный код - что, как я предполагаю, вы можете сделать, но я не знаю, что скачивать, - я бы предположил, что camera.Parameters-это массив или словарь, поэтому значение внутри квадратных скобок оценивается как целое число (и, следовательно, может быть перечислением) или другой тип, например строка.
Маловероятно, что PLCamera является перечислением, так как нет неявного преобразования из перечисления в int, поэтому более вероятно, что это класс / структура значений const int, или параметры-это словарь.

Для словаря это может быть что-то вроде этого:

public static class PLCamera
    {
    public static const string Width = "Width";
    ...
    }
public class ParameterBlock
    {
    public int GetValue() { return 0; }
    ...
    }
private Dictionary<string, ParameterBlock> Parameters = new Dictionary<string, ParameterBlock>();
...
    int x = Parameters[PLCamera.Width].GetValue();

Если это перечисление, то это можно сделать так:
private  Dictionary<PLCamera, ParameterBlock> Parameters = new Dictionary<PLCamera, ParameterBlock>();
...
    int x = Parameters[PLCamera.Width].GetValue();


digiajay

Я добавил исходный код на тот же диск google https://goo.gl/KAaq4K под папкой "Пилон Development.zip"

OriginalGriff

Если она у вас есть, вы только посмотрите на нее!
Что ты видишь?

Richard Deeming

Это вполне возможно для PLCamera быть перечислением. Параметры индекса не ограничиваются числами или строками! :)

OriginalGriff

Это так - но вам придется привести его к int, прежде чем этот код будет компилироваться.

Richard Deeming

Нет ты бы не стал:

enum Person { Ford, Arthur, Zaphod }

class Answer
{
    public int this[Person index]
    {
        get 
        { 
            switch (index)
            {
                case Person.Ford:
                case Person.Arthur:
                case Person.Zaphod:
                {
                    return 42; 
                }
                default:
                {
                    throw new BowlOfPetuniasException("Not again!");
                }
            }
        }
    }
}

OriginalGriff

Об этом я как - то не подумал- молодец!