Error del compilador CS0116

Un espacio de nombres no puede contener directamente miembros como campos o métodos.

Un espacio de nombres puede contener otros espacios de nombres, estructuras y clases. Para más información, consulte el artículo sobre la palabra clave namespace.

Ejemplo

El ejemplo siguiente hará que Visual Studio marque partes del código como una infracción de CS0116. Al intentar compilar este código se producirá un error de compilación:

// 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}");
        }
    }
}

Tenga en cuenta que en C#, los métodos y las variables se deben declarar y definir dentro de una estructura o clase. Para más información sobre la estructura del programa en C#, consulte el artículo Estructura general de un programa de C#. Para corregir este error, vuelva a escribir el código de forma que todos los métodos y campos estén dentro de una estructura o una clase:

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}");
        }
    }
}

Consulte también