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

 我来答
freeeeeewind
2017-01-21 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1343万
展开全部

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

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

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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
娱乐小八卦啊a
高粉答主

2020-04-14 · 娱乐小八卦,天天都知道
娱乐小八卦啊a
采纳数:256 获赞数:117852

向TA提问 私信TA
展开全部

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

代码如下:

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#静态方法调用时无法判断非静态变量使用的内存地址。所以无法使用。而静态变量的地址对类来说是固定的,故可以使用。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式