C#中protected用法详解

 在c#的可访问性级别中,public和private算是最容易理解的,相反protected往往令人非常头疼。经常在网上查资料的朋友往往会发现,
答案几乎都是前篇一律,不是从msdn上拷贝的就是从别人的博客上抄袭的,简直是天下文章一大抄,今天咱们就来点和别人不同的,通过例子来透析一下
protected访问修饰符到底是怎么回事。 

    
下面先来看一下,protected访问修饰符在大多数资料中的定义:访问仅限于包含类或从包含类派生的类型。搞明白问题只靠眼看是不行的,需要实践,现
在我们用事实来说明问题。

代码如下:

class BaseTest

    {

        public int a = 10;

        protected int b = 2;

    }



    class ChildTest:BaseTest

    {

        int c;

        int d;



        public void printTest()

        {

            BaseTest basetest = new BaseTest();

            this.a=basetest.a;

            this.c = basetest.b;

        }

    }

    
这段代码中派生类中的方法的最后一行代码会报错:无法通过类型“protectedtest.Vehicle”的限定符访问保护成员
“protectedtest.Vehicle.weight”;限定符必须是类型“protectedtest.Car”(或者从该类型派生)。看到这
里就会有很多人要问了,不是说protected类型的访问仅限于包含类或者从包含类派生的类型吗,为什么这里还是要报错呢,下面就来说明一下,包含类能
够使用protected类型的应该是没有任何问题了,这里就不用那个说了,主要问题就是集中在为什么在上面的那个例子中基类的实例为什么不能够访问
protected类型的变量,这里就涉及到对protected类型的理解,protected类型并不是能够被派生类所访问就是随心所欲的访问,而是
有条件的,访问必须是通过派生类类型发生时,在派生类中的基类的protected类型成员才能够被访问,这里就很清楚了上面的代码并不是通过派生类的类
型访问的,而是通过基类的类型访问的,此时此刻,protected和private十分的相似,只不过,protected类型成员能够被派生类所继承
并且能够通过派生类类型访问罢了。

    改成如下形式就正确了,不过大家不过拘泥于这两个代码的形式,要看透到底是说明了个什么问题.

class BaseTest

        {

            public int a = 10;

            protected int b = 2;

        }



        class ChildTest : BaseTest

        {

            int c;

            int d;



            static void Main(string[] args)

            {

                BaseTest basetest = new BaseTest();

                ChildTest childTest = new ChildTest();

                Console.WriteLine(childTest.b);//
这是在子类中,派生类的实例访问protcted

            }

        }

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ListBox 是 C# 的一个常用控件,它可以用来显示一个列表,用户可以通过 ListBox 来选择一个或多个项目。下面是 ListBox 的用法详解: 1. 添加 ListBox 控件到窗体 将 ListBox 控件从工具箱拖拽到窗体即可。 2. 设置 ListBox 的属性 常用的属性有: - Items:ListBox 的项目集合。 - SelectionMode:选择模式,可以是 Single(单选)、MultiSimple(多选,按下 Ctrl 键)、MultiExtended(多选,可以使用鼠标拖动)。 - DisplayMember:指定 ListBox 显示项目时所使用的属性。 - ValueMember:指定 ListBox 存储项目时所使用的属性。 3. 添加项目到 ListBox 可以通过代码或者设计器来添加项目。 通过代码添加项目: ```csharp listBox1.Items.Add("项目1"); listBox1.Items.Add("项目2"); listBox1.Items.Add("项目3"); ``` 通过设计器添加项目: 在 ListBox 的属性窗口找到 Items 属性,点击右侧的“…”按钮,在弹出的窗口添加项目。 4. 获取选的项目 可以通过 SelectedItem 属性获取当前选的项目,也可以通过 SelectedItems 属性获取所有选的项目。 ```csharp // 获取当前选的项目 string selectedItem = listBox1.SelectedItem.ToString(); // 获取所有选的项目 List<string> selectedItems = new List<string>(); foreach (var item in listBox1.SelectedItems) { selectedItems.Add(item.ToString()); } ``` 以上就是 ListBox 控件的用法详解。需要注意的是,ListBox 的项目可以是任何类型的对象,不仅仅是字符串。如果需要在 ListBox 显示自定义类型的对象,需要通过 DisplayMember 和 ValueMember 属性来指定显示和存储的属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值