re: Write a function that shows off something unique or interesting about the language you're using VIEW POST


In Ruby we can monkeypatch to easily add functionality to any class.

For example:

class String

  def yell!
    self.upcase + "!!!"


I'm extending the string class so that "hello".yell! outputs "HELLO!!!"

And now all strings in the program have access to the yell! method. ❤️

I'll add that this is sort of bonkers and an easy way to add some really hard-to-debug code to an app. Use with great fear and caution.


Lots of languages support that, including most obviously Javascript.


Interesting. Is that possible via class definitions (class syntax I mean) or only via the prototype syntax?


In F# it is also easy to add functionality to existing classes.

type String with

    member me.yell () =
        me.ToUpper() + "!!!"

You can also add functions to existing static classes (modules) too.

module Array =
    let shuffle arr =

[| for i in 0 .. 23 do yield i * i |]
    |> Array.filter isOdd   // filter is built-in
    |> Array.shuffle        // i added

That's amazing that Ruby and other languages can extend built-in classes as well.

Anyways, to show off C#, here you go.

C# can extend any classes using extension method syntax.

using System;

namespace extensionmethod
    class Program
        static void Main(string[] args)
            Console.WriteLine("Hello World!".Yell());

    public static class StringExtensions
        public static string Yell(this string message)
            return $"{message.ToUpper()}!!!";


$ dotnet run

Note that you should mark the parameter with this

Yell(this string message)...

Here's how this would look in Kotlin:

fun String.yell() = this.toUpperCase()

Another interesting use is to create an Extension Property so you can print any type to the console, like this:

// Define the extension property
val Any.sout
    get() = println(this)

Which can be used like:

fun main(args: Array<String>) {
    "hi".sout // prints hi
    123.sout  // prints 123
    true.sout // prints true

Since this is also available on any other class, any object you create will also have this property and it will call their toString().

code of conduct - report abuse