Unterschied zwischen const und readonly Deklaration

Thomas Darimont

Erfahrenes Mitglied
Hallo,

mit const kann man echte Konstante definieren, die auch tatsächlich bei der deklaration initialisiert werden müssen.
Bei allen als readonly deklarierten Membern kann man die Initialisierung direkt bei der Deklaration vornehmen.
Darüber hinaus kann man aber auch readonly Instanz-Member im Konstruktor wieder neu initialisieren und
readonly Class-Member (static) in einem entsprechendem statischen Konstruktor initialisieren.

C#:
using System;

namespace De.Tutorials.Training
{
    /// <summary>
    /// 
    /// </summary>
    /// <author>Thomas.Darimont</author>
    public class ReadOnly
    {

        protected readonly string SOME_CONSTANT ="FOO";
        protected static readonly string SOME_CC = "1234";

        static ReadOnly()
        {
            SOME_CC = "143";
        }

        public ReadOnly()
        {
            SOME_CONSTANT = "BAR";
            
        }

        //public void SomeEvilOperation(){
        //    SOME_CONSTANT = "XXX";
        //}

        public override string ToString(){
            return SOME_CONSTANT + " " + SOME_CC;
        }

        public static void Main(string[] args)
        {
            Console.WriteLine(new ReadOnly());
        }
    }
}

Gruß Tom
 
Thomas Darimont hat gesagt.:
Darüber hinaus kann man aber auch readonly Instanz-Member im Konstruktor wieder neu initialisieren und
readonly Class-Member (static) in einem entsprechendem statischen Konstruktor initialisieren.
Ein praktisches Anwendungsbeispiel währe zB eine eigene EventArgs Klasse:
C#:
class MessageEventArgs : EventArgs {
	readonly string message;
	readonly bool operationCompleted;
	public static new readonly MessageEventArgs Empty;

	public string Message {
		get { return message; }
	}

	public bool OperationCompleted {
		get { return operationCompleted; }
	}
	
	static MessageEventArgs() {
		Empty = new MessageEventArgs( string.Empty, false );
	}

	public MessageEventArgs( string message, bool operationCompleted ) {
		this.message = message;
		this.operationCompleted = operationCompleted;
	}
}
 

Neue Beiträge

Zurück