c#非静态的字段 方法或属性 要求对象引用的问题

如题所述

第1个回答  2017-01-21

要使用类中定义的非静态字段、属性和方法,必须先实例化类,然后通过实例使用非静态的字段、属性和方法。例如

using System;

namespace ConsoleApplication1
{
    class TestClass
    {
        /// <summary>
        /// 非静态字段
        /// </summary>
        public int X;
        /// <summary>
        /// 非静态属性
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 非静态方法
        /// </summary>
        public void PrintInfo()
        {
            Console.WriteLine("X = {0}", X);
            Console.WriteLine("Name = {0}", Name);
        }
    }
    
    // 测试:使用TestClass定义的非静态成员
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 实例化TestClass
            TestClass tc = new TestClass();
            // 2. 使用非静态字段
            tc.X = 100;
            // 3. 使用非静态属性
            tc.Name = "Lisa";
            // 4. 使用非静态方法
            tc.PrintInfo();
        }
    }
}

核心点:一个类的非静态成员(字段、属性和方法)必须(也只能)通过实例来使用或调用!

本回答被网友采纳
第2个回答  2020-04-14

其实就是要使用的字段,方法或属性是非静态方法,要在实例化对象中使用它们:

代码如下:

public class Team

{

public static int personcount;

protected static string teamname;

private static int foundyearnumber;

internal string leadername=string.Empty;

        static void F()

        {

            //在外部类型访问嵌套类型成员的格式:嵌套类型.成员

            Nested.innernum = 1;//外部类型可以直接访问嵌套类型的静态公共成员,public,internal

            Nested.ppx = 3;//外部类型不可以直接访问嵌套类型的非静态公共成员

            Nested n1 = new Nested();

            Team t1 = new Team();

             t1.leadername = n1.nonstax;

        }

       //嵌套或内部类型

       //在类或结构内部定义

        //嵌套类型默认为private,即嵌套类型对于外部类型(指team之外的类型),team是它的包含类型

        //但嵌套类型可以设置为public,protected,internal,protected internal,private

        //嵌套类型可访问包含类型,如想访问包含类型,请将其作为构造函数传递给嵌套类型

        public class Nested

        {

            //private Nested parent;//在嵌套类型中定义一个包含类型的变量或字段

           public Nested()//在嵌套类型中访问包含类型,为嵌套类型的构造函数传递包含类型的参数           {

          //this.parent=p;

             //personcount = 1;//嵌套类型不能访问包含类型(外部类型)的非静态成员

             //说明在内部类型中可以直接访问外部类型的public,private,protected,internal各类修饰符的static静态成员,而不是非静态成员

             //在内部类型中可以直接访问外部类型成员是直接引用

             personcount = 2;

             teamname = "ls";

             foundyearnumber = 3;

            }

           public static int innernum;

            internal static int ppx;

            protected static int ps;

            private static int pria;

            public string nonstax;

       }

   }

扩展资料

C#中静态与非静态方法比较:

最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法。

C#静态成员:

①静态成员属于类所有,非静态成员属于类的实例所有。

②每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;

静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。

C#静态方法:

1、C#静态方法属于类所有,类实例化前即可使用。

2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。

3、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,这样,C#静态方法调用时无法判断非静态变量使用的内存地址。所以无法使用。而静态变量的地址对类来说是固定的,故可以使用。

本回答被网友采纳
相似回答