Compilerfehler CS0116

Member, wie z.B. Felder oder Methoden, können nicht direkt in einem Namespace enthalten sein.

Ein Namespace kann andere Namespaces, Strukturen und Klassen enthalten. Weitere Informationen finden Sie im Artikel Schlüsselwort „Namespace“.

Beispiel

Das folgende Beispiel veranlasst Visual Studio, Teile des Codes als Verletzung von CS0116 zu kennzeichnen. Der Versuch, diesen Code zu erstellen, führt zu einem Buildfehler:

// CS0116.cs
namespace x
{
    // A namespace can be placed within another namespace.
    using System;

    // These variables trigger the CS0116 error as they are declared outside of a struct or class.
    public int latitude;
    public int longitude;
    Coordinate coord;

    // Auto-properties also fall under the definition of this rule.
    public string LocationName { get; set; }

    // This method as well: if it isn't in a class or a struct, it's violating CS0116.
    public void DisplayLatitude()
    {
        Console.WriteLine($"Lat: {latitude}");
    }

    public struct Coordinate
    {
    }

    public class CoordinatePrinter
    {
        public void DisplayLongitude()
        {
            Console.WriteLine($"Longitude: {longitude}");
        }

        public void DisplayLocation()
        {
            Console.WriteLine($"Location: {LocationName}");
        }
    }
}

Beachten Sie, dass in C# Methoden und Variablen innerhalb einer Struktur oder Klasse deklariert und definiert werden müssen. Weitere Informationen zu Programmstrukturen in C# finden Sie im Artikel Allgemeine Struktur eines C#-Programms. Um diesen Fehler zu beheben, schreiben Sie Ihren Code so um, dass alle Methoden und Felder entweder innerhalb einer Struktur oder einer Klasse enthalten sind:

namespace x
{
    // A namespace can be placed within another namespace.
    using System;

    // These variables are now placed within a struct, so CS0116 is no longer violated.
    public struct Coordinate
    {
        public int Latitude;
        public int Longitude;
    }

    // The methods and fields are now placed within a class, and the compiler is satisfied.
    public class CoordinatePrinter
    {
        Coordinate coord;
        public string LocationName { get; set; }

        public void DisplayLatitude()
        {
            Console.WriteLine($"Lat: {coord.Latitude}");
        }

        public void DisplayLongitude()
        {
            Console.WriteLine($"Longitude: {coord.Longitude}");
        }

        public void DisplayLocation()
        {
            Console.WriteLine($"Location: {LocationName}");
        }
    }
}

Siehe auch