Im Klartext hinterlegte Passwörter sind natürlich in keinster Weise zu empfehlen, da sie leicht ausgelesen werden können. Dennoch sind die für kleinere Programme, welche unkritisch sind manchmal sinnvoll, da solch ein Passwortschutz schnell geschrieben ist und seinen Zweck allemal erfüllt.
Ein mir bekanntes Beispiel wäre ein Textticker, in welchem man den Pfad nur mittels Passworteingabe ändern kann (solch ein Programm ist sehr unkritisch und bedarf keines extra Schutzes. Zudem verhindert solch ein Passwort, dass unbedarfte Benutzer die Einstellungen (un)absichtlich verändern).

Hartcodiert

Ist wohl die einfachste Möglichkeit ein Passwortschutz zu integrieren.
Dazu benötigt man lediglich zwei Strings(Username/Passwort) und legt diese wie gewünscht fest. Bspw. Username:Root, Passwort:tooR
In der Credentialsabfrage vergleichen wir dann einfach die hinterlegten mit jenen, welche eingegeben wurden.
Folgender Code wird dafür benötigt:

        string login_user = "Root"; //Hartcodierter Eintrag des Users
        string login_pw = "tooR"; //Hartcodierter Eintrag für das Passwort

        public Form1()
        {
            InitializeComponent();
            auth_button.Click += new EventHandler(auth_button_Click); //Eventhandler für den Click auf den Authentifizierungbutton
        }

        private void auth_button_Click(object sender, EventArgs e)
        {
            if (authenticate() == true) //Aufruf der Methode zum Vergleich der eingetragenen Werte mit den hinterlegten
                MessageBox.Show("Erfolgreich authentifiziert");
            else
                MessageBox.Show("Anmeldung war nicht erfolgreich");
        }

        private bool authenticate() //Rückgabetyp boolean
        {
            if (user_textBox.Text == login_user && pw_textBox.Text == login_pw) //Überprüfung der Gleichheit der Werte
                return true; //Gibt true zurück, falls die Werte gleich sind
            else //Ansonsten false
                return false;
        }

In Datei klar gespeichert

Ist eigentlich das selbe Spiel, jedoch weisen wir den Strings nicht „sofort“ einen Werte zu, sondern lesen sie zuerst aus einer Datei aus und dann weisen wir sie zu.
Da sich dieser Variante nur durch das Auslesen unterscheidet, werde ich nur eben jenes beschreiben.

Zuerst fügen wir den Namespace System.IO; mittels:

using System.IO;

hinzu und rufen folgende Methode beim Starten des Programms(im Konstruktor der Main-Klasse) auf

        private void GetLoginValues()
        {
            int lineCount = 1; //Wird benötigt, um die aktuelle Zeile zu ermitteln
            StreamReader credValueReader = new StreamReader("credValue.txt"); //Hier wird das Objekt angelegt und der Pfad festgelegt
            //in diesem Fall muss die Datei im Verzeichnis des Programmes liegen
            while (!credValueReader.EndOfStream) //Solange nicht das Ende der Datei erreicht wurde
            {
                switch (lineCount)
                {
                    case 1:
                        login_user = credValueReader.ReadLine(); //Weißt dem Userstring den Wert der ersten Zeile zu
                        break;
                    case 2:
                        login_pw = credValueReader.ReadLine(); //Weißt dem Passwortstring den Wert aus der nächsten Zeile(2) zu
                        break;
                }
                lineCount++; //erhöht den Zeilenzähler
            }
            credValueReader.Close(); //Löst den Zugriff auf die Datei(ist sehr wichtig!)
        }