Собственность, с которой обращаются так, как будто она является собственностью другой собственности?

#c# #class #properties

Вопрос:

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

Как это допускается?

 Renderer renderer = GetComponent<Renderer>();

renderer.material.color = Color.red;
 

Renderer это класс. renderer.material вот свойство Material класса. Это довольно ясно.

Вот часть , которую я не понимаю: renderer.material.color согласно Visual Studio, это свойство Material класса, но мне кажется, что оно рассматривается здесь как член Renderer класса. Я не понимаю, как это работает.

Мне также кажется, что color свойство является свойством другого свойства ( material ), но я не знаю о существовании такой концепции в C#. Что я здесь упускаю?

Комментарии:

1. Мне кажется, что у визуализатора есть свойство, называемое материалом, а у материала есть свойство, называемое цветом? Что в этом странного?

2. material вот свойство Renderer класса. Как у собственности может быть собственность? Вот о чем я здесь спрашивал. Если вы имеете в виду, что это color свойство Material класса, то для меня это все равно не имеет смысла, потому color что доступ к свойству осуществляется так, как если бы оно было членом Renderer класса.

3.@boulder Свойство имеет тип Material , и у этого типа есть свойство color . Почему это странно для тебя?

4. Рассмотрим класс под названием Company . Одним из свойств Company является President . President Свойство относится к типу Person . Одним из свойств Person класса PrimaryAddress является тип Address . Address Класс имеет string свойство с именем City . Предполагая , что у меня есть правильно инициализированный Company объект в переменной с именем myCompany , я мог бы сказать var myPresidentsAddress = myCompany.President.PrimaryAddress.City;

Ответ №1:

Имеет ли смысл, если я вырву это вот так?

 Renderer rend = GetRenderer...

Material mat = rend.material;

Color col = mat.Color;

Console.WriteLine("color is " col " setting material's color to red..");

mat.Color = Color.red;
 

Это цвет внутри материала внутри средства визуализации.

Это похоже на эту пару классов (предположим, что все модификаторы доступа являются общедоступными и опущены для ясности).:

 class Address{
  string Street;
}
class Person{
  Address HomeAddress;
  Address WorkAddress;
}

...

myPerson.HomeAddress.Street = "1, Infinite Loop";
 

Это просто навигация по используемому графику объектов . ; я уверен, что вы делали это сотни раз раньше