.net 无法通过嵌套类型访问外部类型的非静态成员-解决方案

简介: 1、案例出错现场“无法通过嵌套类型访问外部类型的非静态成员”     2、源文件代码分析 点击(此处)折叠或打开 基本类文件结构如下: xxxxx.

1、案例出错现场“无法通过嵌套类型访问外部类型的非静态成员”


image_thumb17 image_thumb18 image_thumb19


 

2、源文件代码分析


点击(此处)折叠或打开

  1. 基本类文件结构如下:

  2. xxxxx.cs

  3. using ……;

  4. namespace AAA

  5. {

  6. ……

  7. public partial class BBB

  8. {

  9.       public void CWaitForGetPresetOver()

  10. {

  11. //////

  12. }

  13. public setProgressBar()

  14. {

  15. //////////

  16. }


  17. ////////////////////////////////////////////////////////////////////////////////////////

  18. // CWaitForGetPresetOver类结构

  19. public class CWaitForGetPresetOver
  20. {

  21. public CWaitForGetPresetOver()

  22. {

  23. //////////////

  24. }

  25. public void WaitForGetPresetOver()

  26. {
  27. setProgressBar();

  28. }

  29. }

  30. /////////////////////////////////////////////////////////////////////////////////////////

  31. // BBB中某些函数对CWaitForGetPresetOver的调用
  32. ...........

  33. CWaitForGetPresetOver CWForGetPresetOver_demo = new CWaitForGetPresetOver();
  34. CWForGetPresetOver_demo.CWaitForGetPresetOver();
  35. ...........

  36. }

  37. }

上面CS文件的基本结构是:

外部类型 BBB,

BBB有一个公有方法,setProgressBar();

BBB里面有一个内部类型CWaitForGetPresetOver;

上面代码,当执行到CWForGetPresetOver_demo.CWaitForGetPresetOver();的时候就会爆出1中的错误。

 

3、解决方法


主要是修改嵌套类型,在其构造函数中将外部类型传进去;再在嵌套类型内部通过外部类型对象进行操作其成员函数!

代码修改如下:

点击(此处)折叠或打开

  1. //  嵌套类型构造函数
  2. public class CWaitForGetPresetOver
  3. {

  4. BBB BBB_demo;



  5. // 嵌套类型构造函数中传入外部类型

  6. public CWaitForGetPresetOver(BBB BBB_demo)

  7. {

  8. this.BBB BBB_demo = BBB BBB_demo;

  9. }



  10. public void WaitForGetPresetOver()

  11. {

  12. //通过传进来外部类型,调用其对象成员

  13. BBB_demo.setProgressBar();

  14. }


4、参考文献

Msdn上说:
嵌套类型(或内部类型)可访问包含类型(或外部类型)。若要访问包含类型,请将其作为构造函数传递给嵌套类型。例如:

 
  


点击(此处)折叠或打开

  1. C# code
  2. public class Container
  3. {
  4.     public class Nested
  5.     {
  6.         private Container m_parent;

  7.         public Nested()
  8.         {
  9.         }
  10.         public Nested(Container parent)
  11.         {
  12.             m_parent = parent;
  13.         }
  14.     }
  15. }

据此,你的代码更改如下:
C# code
 
  


点击(此处)折叠或打开

  1. public class checkFlowThread
  2.         {
  3.             Form1 form1;
  4.             public checkFlowThread(Form1 f)
  5.             {
  6.                this.form1=f;
  7.             }
  8.             public void checkFlow()
  9.             {
  10.             form1.Label.Text = "想访问外部类的非静态成员";
  11.             }
  12.         }

嵌套类型可访问包含类型的私有成员和受保护的成员(包括所有继承的保护的成员)。 

相关文章
|
3月前
|
网络协议 Java Linux
Java 异常 java.net.UnknownHostException 的原因和解决方案
Java 异常 java.net.UnknownHostException 的原因和解决方案
509 0
|
1月前
|
Windows
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
128 0
|
4月前
|
消息中间件 存储 NoSQL
.NET开源的处理分布式事务的解决方案
.NET开源的处理分布式事务的解决方案
|
5月前
|
SQL 监控 NoSQL
一个.Net Core开发的,撑起月6亿PV开源监控解决方案
一个.Net Core开发的,撑起月6亿PV开源监控解决方案
28 0
|
6月前
|
Kubernetes 监控 网络协议
【K8S系列】Weave Net 故障排除的常见问题和解决方案
【K8S系列】Weave Net 故障排除的常见问题和解决方案
84 0
|
7月前
.NET Core配置强类型绑定及配置热更新能力
学习了配置框架的4种配置方式之后,我们可以对不同的环境选择不同的配置方式,以使服务能够更好的适应各种环境,那么,你是否觉得配置虽然加载进服务中,但是使用起来却不是很方便,每次读取都得通过对应的键值去根查找,是否想过如果我们修改了配置文件呢?本篇,我们一起来学习下这两个问题。为了方便演示,本节使用文件提供程序配置方式。
|
9月前
|
数据库 C#
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
219 0
|
测试技术
JMeter java.net.URISyntaxException:Illegalcharacterinquery解决方案
JMeter java.net.URISyntaxException:Illegalcharacterinquery解决方案
173 0
|
测试技术
JMeter java.net.SocketException:Operationnotsupported:connect解决方案
JMeter java.net.SocketException:Operationnotsupported:connect解决方案
250 0
|
消息中间件 SQL 开发框架
.NET Core 事件总线,分布式事务解决方案:CAP
.NET Core 事件总线,分布式事务解决方案:CAP
.NET Core 事件总线,分布式事务解决方案:CAP