Aptivi - Manual
ProjectsWebsiteBlog
Nitrocid KS - Manual
Nitrocid KS - Manual
  • Welcome!
  • Versions and Compatibility
    • Supported Versions
    • EOL Versions
    • Version Release Notes
      • v0.0.1.x series
      • v0.0.2.x series
      • v0.0.3.x series
      • v0.0.4.x series
      • v0.0.5.x series
        • v0.0.5.0 Beta Versions
      • v0.0.6.x series
        • v0.0.6.0 Beta Versions
      • v0.0.7.x series
        • v0.0.7.0 Beta Versions
      • v0.0.8.x series
      • v0.0.9.x series
      • v0.0.10.x series
      • v0.0.11.x series
      • v0.0.12.x series
      • v0.0.13.x series
      • v0.0.14.x series
      • v0.0.15.x series
      • v0.0.16.x series
      • v0.0.17.x series
      • v0.0.18.x series
      • v0.0.19.x series
      • v0.0.20.x series
      • v0.0.21.x series
      • v0.0.22.x series
      • v0.0.23.x series
      • v0.0.24.x series
      • v0.1.0.x and 0.1.1.x series
      • v0.1.2.x and v0.1.3.x series
    • Compatibility Notes for KS API Revisions
      • Upgrading to API v1.0 series
      • Upgrading to API v1.1 series
      • Upgrading to API v1.2 series
      • Upgrading to API v1.3 series
      • Upgrading to API v2.0 series
      • Upgrading to API v2.1 series
      • Upgrading to API v3.0 series
        • From 0.0.24.x to 0.1.0 Beta 1
        • From 0.1.0 Beta 1 to 0.1.0 Beta 2
        • From 0.1.0 Beta 2 to 0.1.0 Beta 3
        • From 0.1.0 Beta 3 to 0.1.0 RC
        • From 0.1.0 RC to 0.1.0 Final
      • Upgrading to API v3.1 series
  • Installation and Maintenance
    • Installing the Kernel
      • Windows
      • macOS
      • Linux
      • Android
    • Upgrading the Kernel
      • Windows
      • macOS
      • Linux
      • Android
    • Dependency Information
  • Fundamentals
    • What is the Kernel?
    • What is Nitrocid KS?
    • Simulated Kernel Features
      • Extra Features
        • More Networking
          • FTP Client
          • SSH Connection
          • SFTP Client
          • RSS Client
          • HTTP Client
          • Mail Client
        • Games and Amusements
          • Hangman
          • BackRace
          • Meteor
          • Pong
          • Russian Roulette
          • ShipDuet
          • Snaker
          • Solver
          • SpeedPress
          • Wordle
        • More Editors
          • JSON Editor
          • SQL Editor
        • Common Programs
          • Archive
          • Caffeine
          • Calendar
          • Calculator
          • Contacts
          • Dictionary
          • Git Shell
          • Notes
          • Stocks
          • Timers
          • To-do List
          • Unit Converter
          • Weather
        • Docking
        • Language Studio
        • Theme Studio
      • Accounts
        • Groups
        • Permissions
      • Editors
        • Text Editor
        • Hex Editor
      • Shells
        • Commands List
        • Addon Commands List
      • Files and Folders
        • Hashing and Encryption
      • The Nitrocid Homepage
      • Networking
      • Localization
      • Screensavers
      • Lockscreen Widgets
      • Audio Cues
  • Advanced and Power Users
    • Building the Kernel
      • Building on Windows
      • Building on macOS
      • Building on Linux
      • Building on Android
    • Kernel Modifications
      • Building your Mod
      • Analyzing your Mod
        • Text - NKS0001
        • ConsoleBase - NKS0002
        • ConsoleBase - NKS0003
        • ConsoleBase - NKS0004
        • ConsoleBase - NKS0005
        • ConsoleBase - NKS0006
        • ConsoleBase - NKS0007
        • ConsoleBase - NKS0008
        • ConsoleBase - NKS0009
        • Files - NKS0010
        • Files - NKS0011
        • Files - NKS0012
        • Files - NKS0013
        • Files - NKS0014
        • Files - NKS0015
        • Files - NKS0016
        • Files - NKS0017
        • Files - NKS0018
        • Files - NKS0019
        • Files - NKS0020
        • Files - NKS0021
        • Files - NKS0022
        • Files - NKS0023
        • Kernel - NKS0024
        • Kernel - NKS0025
        • Kernel - NKS0026
        • Kernel - NKS0027
        • Kernel - NKS0031
        • Kernel - NKS0032
        • Kernel - NKS0033
        • Kernel - NKS0037
        • Kernel - NKS0038
        • Kernel - NKS0039
        • Kernel - NKS0040
        • Kernel - NKS0041
        • Kernel - NKS0042
        • Kernel - NKS0043
        • Kernel - NKS0052
        • Kernel - NKS0053
        • Languages - NKS0044
        • Languages - NKS0045
        • Languages - NKS0046
        • Network - NKS0051
        • Text - NKS0047
        • Text - NKS0048
        • Text - NKS0049
        • Text - NKS0050
        • Text - NKS0054
        • Text - NKS0055
      • Managing your Mod
        • Inter-Mod Communication
        • Inter-Addon Communication
    • Diagnostics
      • Debugging
        • Local Debugging
        • Remote Debugging
      • Testing
      • Other Diagnostics
    • Bootloader
      • Boot Choices
      • Kernel Environments
      • Custom Boot Styles
    • Inner Workings
      • Kernel Settings
        • Mechanics of Settings App
        • Settings Format
        • Custom Settings
      • Shell Structure
        • Help System
        • Command Parsing
        • Command Information
        • Command Switches
        • Shell History
        • Shell Scripting
        • Shell Presets
        • Extra Shell Features
      • Multilingual Kernel
        • Locale Tools
        • Custom Languages
      • Inner Essentials
        • Kernel Drivers
          • Console Drivers
          • Debug Logger Drivers
          • Encoding Drivers
          • Encryption Drivers
          • Filesystem Drivers
          • Hardware Prober Drivers
          • Input Drivers
          • Network Drivers
          • RNG Drivers
          • Regular Expression Drivers
          • Sorting Drivers
        • Kernel Placeholders
        • The Permissions
        • The Users
        • Kernel Threads
        • Kernel Arguments
        • Kernel Journaling
        • Remote Procedure
        • Nitrocid Filesystem
        • Screensaver Internals
        • Splash Internals
        • Kernel Platform
        • Theme Internals
        • Color Internals
        • Privacy Consents
        • System Notifications
        • MAL and MOTD
        • Progress Handlers
        • Assembly Signing
        • Assembly Reflection
        • Random Number Generation
        • Network Tools
        • Date and Time
        • Mod Manual Pages
      • Miscellaneous APIs
  • Project Dependencies
  • Report an issue
  • Source code
  • API Reference
Powered by GitBook
On this page
  • Array manipulation
  • Assembly lookup management
  • Integer tools
  • File size conversion
  • Properties and Fields
  • Method tools
  • Common reflection tools
Edit on GitHub
  1. Advanced and Power Users
  2. Inner Workings
  3. Inner Essentials

Assembly Reflection

Reflecting things...

Last updated 4 months ago

Nitrocid KS provides you with reflection tools to make using it easier for mods that want to use this feature for the following reasons:

  • Deep manipulation with the arrays

  • Assembly lookup management

  • Field, property, and method management

  • Integer manipulation

  • Common reflection tools

This feature of Nitrocid KS is essential in cases where the default .NET implementation doesn't implement features that are not normally available for all the supported frameworks, such as array randomization that isn't available until .NET 8.0. This feature can also be used in future versions of Nitrocid KS to emulate features that have been implemented in future .NET versions and to do unusual tricks with various types, such as swapping two integers.

Array manipulation

The reflection part of Nitrocid KS contains tools that allow you to manipulate with the arrays, such as sorting and randomizing array elements. Here are the following functions that you can use:

  • RandomizeArray(): Randomizes the array using the formula.

  • RandomizeArraySystem(): Randomizes the array using .NET 8.0's function.

  • SortNumbers(): Sorts the numbers using one of the sorting algorithms implemented by your array sorting drivers.

Some features use the kernel driver tools, which you can learn more about it . SortNumbers() also allows you to use the sorting driver name as a shortcut to getting the sorting driver yourself.

Assembly lookup management

Nitrocid KS contains the assembly lookup tools to manage how the kernel will load the assemblies specified in the search paths that AssemblyLookup manages. It allows you to add and to remove a path to/from the lookup path list using the following functions:

  • AddPathToAssemblySearchPath()

  • RemovePathFromAssemblySearchPath()

In case Nitrocid attempts to load an old mod that depends on the old name of the application, Kernel Simulator, it'll give you an error saying that the mod is too old to be loadable. Therefore, mod loading will fail. If you're experiencing this in one of your mods and believe that this is the reason, contact the mod publisher for details about how to get the latest version.

Integer tools

The Reflection part of the kernel contains a class, IntegerTools, that consists of useful integer tools from short numbers to 128-bit integer numbers to double-precision numbers, like converting literal file sizes in bytes to their human formats.

In addition to that, we've also placed useful extensions, such as converting the number of all kinds, short or long, to different number bases as strings, such as:

  • ToBinary()

  • ToOctal()

  • ToNumber()

  • ToHex()

File size conversion

SizeString() extension functions can be used when importing the Reflection namespace. This allows you to easily convert the file sizes from bytes to their human-readable format.

You can use these functions, once the above namespace is imported, like this:

MyModFuncs.cs
long bytes = 1024L * 1024 * 1024 * 1024;
string humanized = bytes.SizeString();
// Value of humanized: 1 TB

You can't use this function for enormous sizes, like 1 zettabytes, because of the limitation of the long integers. However, you shouldn't worry about this situation, since this is used generally for file sizes, and a single file in the world hasn't reached this size yet.

Properties and Fields

The Reflection part of the Nitrocid API provides you with options to access public properties and fields that are declared in the public classes dynamically.

  • PropertyManager manages properties, such as getting and setting property values.

  • FieldManager manages fields, such as getting and setting field values.

In addition to the functions available in the above two classes, you can get all fields and properties defined in all the kernel types using the following functions:

  • GetAllFields()

  • GetAllFieldsNoEvaluation()

  • GetAllProperties()

  • GetAllPropertiesNoEvaluation()

Method tools

In addition to property and field tools, the reflection feature of Nitrocid KS also allows you to manage methods and invoke them by their name or by their MethodBase instance. This set of tools allows you to do the following:

  • GetMethod(): This function allows you to get a public method from either one of the Nitrocid kernel types or a specific type inside and outside Nitrocid.

  • InvokeMethod(): This function allows you to invoke a non-static method, provided that you already have an object that is of a specific type that implements the public method.

  • InvokeMethodStatic(): This function allows you to invoke a public static method.

Common reflection tools

Finally, the common reflection tools are here to help you get the most out of the reflection feature of .NET by providing you the following functions:

  • IsDotnetAssemblyFile(): This function checks to see if a path to a specific file is a .NET assembly or not. If it is a .NET assembly, it returns true with an AssemblyName instance containing information about your desired assembly.

To load an assembly from the search paths, such as your mod dependencies, Nitrocid adds an event handler to the event to be able to call our assembly path resolver in an attempt to load any and all dependencies for your mods.

Schwartzian's transform
Random.Shared.Shuffle()
here
AppDomain.CurrentDomain.AssemblyResolve