#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";
Это просто навигация по используемому графику объектов .
; я уверен, что вы делали это сотни раз раньше