How Can I inherit the string class?

If your intention behind inheriting from the string class is to simply create an alias to the string class, so your code is more self describing, then you can't inherit from string. Instead, use something like this:

using DictKey = System.String;
using DictValue= System.String;
using MetaData = System.String;
using SecurityString = System.String;

This means that your code is now more self describing, and the intention is clearer, e.g.:

Tuple<DictKey, DictValue, MetaData, SecurityString> moreDescriptive;

In my opinion, this code shows more intention compared to the same code, without aliases:

Tuple<string, string, string, string> lessDescriptive;

This method of aliasing for more self describing code is also applicable to dictionaries, hash sets, etc.

Of course, if your intention is to add functionality to the string class, then your best bet is to use extension methods.


System.String is sealed, so, no, you can't do that.

You can create extension methods. For instance,

public static class MyStringExtensions
{
    public static int WordCount(this string inputString) { ... }
}

use:

string someString = "Two Words";
int numberOfWords = someString.WordCount();

Another option could be to use an implicit operator.

Example:

class Foo {
    readonly string _value;
    public Foo(string value) {
        this._value = value;
    }
    public static implicit operator string(Foo d) {
        return d._value;
    }
    public static implicit operator Foo(string d) {
        return new Foo(d);
    }
}

The Foo class acts like a string.

class Example {
    public void Test() {
        Foo test = "test";
        Do(test);
    }
    public void Do(string something) { }
}