Object Oriented Programming Advanced Usage – Arma Reforger
Lou Montana (talk | contribs) m (Text replacement - "</syntaxhighlight>" to "</enforce>") |
Lou Montana (talk | contribs) (Add private access to modded classes) |
||
Line 102: | Line 102: | ||
A mod can inherit/replace an existing class with the use of the {{hl|modded}} keyword.<br> | A mod can inherit/replace an existing class with the use of the {{hl|modded}} keyword.<br> | ||
It is used to inject inherited class into class hierarchy without modifying other scripts (especially suitable in modding). A modded class behaves like a class inherited from the original class (one can use {{hl|[[Arma Reforger:Object Oriented Programming Basics#super|super]]}} to access the original class). When a modded class is declared, the modded class will be instanced instead of the original class. Only classes within the same module can be modded (to mod a class in e.g {{hl|GameLib}} module, the modded class has to be placed in the {{hl|GameLib}} module). | It is used to inject inherited class into class hierarchy without modifying other scripts (especially suitable in modding). A modded class behaves like a class inherited from the original class (one can use {{hl|[[Arma Reforger:Object Oriented Programming Basics#super|super]]}} to access the original class) but also allows '''{{hl|private}}''' methods and functions access and modification. When a modded class is declared, the modded class will be instanced instead of the original class. Only classes within the same module can be modded (to mod a class in e.g {{hl|GameLib}} module, the modded class has to be placed in the {{hl|GameLib}} module). | ||
<enforce> | <enforce> | ||
Line 108: | Line 108: | ||
class A | class A | ||
{ | { | ||
private string m_sPrivateString = "something said"; | |||
void Say() | void Say() | ||
{ | { | ||
Print("original Say method"); | Print("original Say method"); | ||
Print(m_sPrivateString); | |||
} | } | ||
}; | }; | ||
void Test() | |||
{ | |||
A a = new A(); // "class A" is instanced | |||
a.Say(); // prints "original Say method" then "something said" | |||
} | |||
// mod | // mod | ||
Line 119: | Line 128: | ||
void Say() | void Say() | ||
{ | { | ||
m_sPrivateString = "modded said"; | |||
Print("modded Say method"); | Print("modded Say method"); | ||
super.Say(); | super.Say(); | ||
Line 124: | Line 134: | ||
}; | }; | ||
void | void TestModded() | ||
{ | { | ||
A a = new A(); // "modded class A" is instanced | A a = new A(); // "modded class A" is instanced | ||
a.Say(); // prints | a.Say(); // prints "modded Say method" then "original Say method" and "modded said" | ||
} | } | ||
</enforce> | </enforce> |
Revision as of 09:56, 22 September 2022
Casting
Casting is the act of "presenting" a value as another type. For example, if a class hierarchy is Animal > Dog > Cocker, a dog is an animal, a cocker is a dog (that is an animal), but a dog is not especially a cocker.
Upcasting
Upcasting means seeing the class as one of its parents:
Downcasting
Downcasting means seeing a parent class as a specific child - this must be done by manually casting:
Manual Casting
Template
A template is a class that allows a generic management for multiple types. Its methods cannot assume anything about the type.
Modding
A mod can inherit/replace an existing class with the use of the modded keyword.
It is used to inject inherited class into class hierarchy without modifying other scripts (especially suitable in modding). A modded class behaves like a class inherited from the original class (one can use super to access the original class) but also allows private methods and functions access and modification. When a modded class is declared, the modded class will be instanced instead of the original class. Only classes within the same module can be modded (to mod a class in e.g GameLib module, the modded class has to be placed in the GameLib module).