首页 文章 精选 留言 我的

精选列表

搜索[c/c ],共10000篇文章
优秀的个人博客,低调大师

C#中访问私有成员

首先我必须承认访问一个类的私有成员不是什么好做法。大家也都知道私有成员在外部是不能被访问的。而一个类中会存在很多私有成员:如私有字段、私有属性、私有方法。对于私有成员访问,可以套用下面这种非常好的方式去解决。 private string name; public string Name { get { return name; } set { name = value; } } 但是有时候,源代码是别人的,你就不能修改源代码,只提供给你dll。或者你去维护别人的代码,源代码却有丢失。这样的情况如果你想知道私有成员的值,甚至去想直接调用类里面的私有方法。那怎么办呢?其实在.net中访问私有成员不是很难,这篇文章提供几个简单的方法让你如愿以偿。 为了让代码用起来优雅,使用扩展方法去实现。 1、得到私有字段的值: public static T GetPrivateField<T>(this object instance, string fieldname) { BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic; Type type = instance.GetType(); FieldInfo field = type.GetField(fieldname, flag); return (T)field.GetValue(instance); } 2、得到私有属性的值: public static T GetPrivateProperty<T>(this object instance, string propertyname) { BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic; Type type = instance.GetType(); PropertyInfo field = type.GetProperty(propertyname, flag); return (T)field.GetValue(instance, null); } 3、设置私有成员的值: public static voidSetPrivateField(this objectinstance,stringfieldname,objectvalue) { BindingFlagsflag =BindingFlags.Instance |BindingFlags.NonPublic; Typetype = instance.GetType(); FieldInfofield = type.GetField(fieldname, flag); field.SetValue(instance, value); }4、设置私有属性的值:public static voidSetPrivateProperty(this objectinstance,stringpropertyname,objectvalue) { BindingFlagsflag =BindingFlags.Instance |BindingFlags.NonPublic; Typetype = instance.GetType(); PropertyInfofield = type.GetProperty(propertyname, flag); field.SetValue(instance, value,null); }5、调用私有方法: public staticT CallPrivateMethod<T>(this objectinstance,stringname,params object[] param) { BindingFlagsflag =BindingFlags.Instance |BindingFlags.NonPublic; Typetype = instance.GetType(); MethodInfomethod = type.GetMethod(name, flag); return(T)method.Invoke(instance, param); } 测试: 下面我们使用一个测试类,进行测试。新建一个类库项目,测试的类代码如下: public class TestClass { public TestClass() { privatefield1 = 1; privatefield2 = 99; PrivateFieldA = "Lo"; PrivateFieldB = "ve"; } private int privatefield1; private int privatefield2; private string PrivateFieldA { get; set; } private string PrivateFieldB { get; set; } private int Add() { return privatefield1 + privatefield2; } private string Join() { return PrivateFieldA + PrivateFieldB; } } 将上面类库的dll引入控制台项目中。使用下面代码去使用这个类的私有成员: TestClass obj = new TestClass(); System.Console.WriteLine("私有字段"); System.Console.WriteLine(obj.GetPrivateField<int>("privatefield1")); System.Console.WriteLine(obj.GetPrivateField<int>("privatefield2")); System.Console.WriteLine("私有属性"); System.Console.WriteLine(obj.GetPrivateProperty<string>("PrivateFieldA")); System.Console.WriteLine(obj.GetPrivateProperty<string>("PrivateFieldB")); System.Console.WriteLine("私有方法"); System.Console.WriteLine(obj.CallPrivateMethod<int>("Add",null)); System.Console.WriteLine(obj.CallPrivateMethod<string>("Join", null)); System.Console.WriteLine("修改私有属性"); obj.SetPrivateProperty("PrivateFieldA", "hello"); obj.SetPrivateProperty("PrivateFieldB", "world"); System.Console.WriteLine(obj.CallPrivateMethod<string>("Join", null)); System.Console.Read(); 结果如下: 总结:实现对类私有成员的访问。 本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/07/25/Access-Private-Member.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

C++学习第三天

一些基础就可以略过了,看书不能太呆板。 如果把一本书看完了,剩下的就是在实际项目中进行整合,训练,然后整理成笔记。 每天敲点程序,记点笔记。 变量作用域 代码: #include <iostream> #include <string> #include <conio.h> std::string s1 = "hello"; //全局 int main(){ std::string s2 = "world"; //局部 std::cout<<s1<<" "<<s2<<std::endl; int s1 = 42; //局部+隐式全局 std::cout<<s1<<" "<<s2<<std::endl; getch(); return 0; } 结果:hello world42 world判断代码输出结果 代码: #include <iostream> #include <string> #include <conio.h> int i = 42; int main(){ int i = 100,sum = 0; for(int i = 0;i!=10;++i) sum += i; std::cout<<i<<" "<<sum<<std::endl; getch(); return 0; } 结果:100 45 用class和struct关键字定义类的唯一差别在于默认访问级别:默认情况下,struct的成员为public,而class的成员为private。一旦使用了using声明,我们就可以直接引用名字,而不需要再引用改名字的命名空间了。 代码: #include <iostream> #include <string> #include <conio.h> using std::cin; using std::string; using std::cout; int main(){ string s; cin>>s; cout<<s; getch(); return 0; } #include <iostream> #include <string> #include <conio.h> using std::cin; using std::string; using std::cout; using std::endl; int main(){ string st("The expense of spirit\n"); cout<<"The size of "<<st<<"is"<<st.size() <<" characters,including the newline"<<endl; getch(); return 0; } 结果:The size of The expense of spiritis22 characters,including the newline 本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/archive/2013/04/11/3014962.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

UIWebView without a .xib Objective-C[转]

Add a UIWebView programmatically without using a .xib file. This goes in the views controller. Original fromhttp://www.gibsontang.com/?p=176(Big thanks man!) - (void) initUIWebView { NSLog(@”DetailViewController->initUIWebView {“); UIWebView *aWebView; // init and create the UIWebView aWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)]; aWebView.autoresizesSubviews = YES; aWebView.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth); //set the web view delegates for the web view to be itself [aWebView setDelegate:self]; //Set the URL to go to for your UIWebView NSString *urlAddress = @”http://www.google.com”; //Create a URL object. NSURL *url = [NSURL URLWithString:urlAddress]; //URL Requst Object NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; //load the URL into the web view. [aWebView loadRequest:requestObj]; //add the web view to the content view [self.view addSubview:aWebView]; [aWebView release], aWebView = nil; } - (void)viewDidLoad { [self initUIWebView]; // <<<<<<<<<<<< this calls the UIWebView Function [super viewDidLoad]; } 欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!' 本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/archive/2011/11/22/2258908.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Objective-C之预处理程序

预处理指令使用#内标记。 一 : #define语句 用来定义宏。例如定义: #define TRUE 1 解释 : 定义了一个宏名称为TRUE,并使它的值为1.那么之后TRUE就可以用于程序中所有需要值为1的常量的地方。 测试实例: 在DefineDemo.h中定义宏 : #define TRUE 1 。注意一般将其定义在最上面,如下图(定义在了#import的上面) 调用的地方:可以在任何地方调用。 ①:在DefineDemo.m中调用: ②:在主程序main.m中调用: 结果: 注意 : 宏是只读的 二 : 条件编译之 #ifdef , #endif , #else , #ifndef , #elif #ifdef : 如果存在编译参数 #ifndef : 如果不存在编译参数 例如:修改了下DefineDeno.m中Print方法的实现,如下: 我没有定义编译参数AINY , 则会打印Ainy not。结果如下,确实如此: 那么问题来了,如何定义一个编译参数AINY呢 ?????? 在Build Settings中: 再次运行结果,则是打印TRUE值1 显然 : #ifdef , #ifndef 和Build Settings中的如上图所示的配置是相关的 三 : #if 是判断常量的 如: 四 : 编译参数之 #undef : 消除某个编译参数 如 : #undef AINY ,在这句执行后, 所有#if AINY 及 #if defined(AINY) 都为FALSE 本文转自Aonaufly51CTO博客,原文链接:http://blog.51cto.com/aonaufly/2049027,如需转载请自行联系原作者

优秀的个人博客,低调大师

C7609之ACL匹配问题

近期在做一个ACL的时候,由于匹配同一段目的地的端口太多,所以就采用了多端口写于同一个ACE的办法。如下: ip access-list extended fromv20 10 permit tcp any 1.1.1.0 0.0.0.255 eq 11 22 33 44 55 66 77 88 20 permit tcp any 1.1.1.0 0.0.0.255 log int vlan 20 ip access-group fromv20 in log ip access-list cache in end 结果发现很多tcp66端口匹配的log记录,如下。但是10的ACE根本就没有打log,由于log没有输出是匹配的哪条ACE,所以不能明确的确定此记录是匹配的10还是20。不过,我在2960的IOS上做了将多个tcp端口集合写在一条ACE是可以的。 1469305: Mar 15 21:15:41.098 CST: %AFLSEC-6-OALP: permitted tcp 2.2.2.2(38315) -&gt; 1.1.1.1(66), 1 packet 1469306: Mar 15 21:15:41.854 CST: %AFLSEC-6-OALP: permitted tcp 2.2.2.2(36761) -&gt; 1.1.1.1(66), 1 packet 将符合条件的多个端口写在一条ACE仅有如下优点: 1,减少ACE条目便于维护管理; 2,不能减少TCAM的hash表数,这个已经通过实验证明(查看 http://ipneter.blog.51cto.com/341177/283556)。 后续查询cisco的ios bug库,发现如下bug。说明上述情况为IOS的一个bug: 本文转自 chris_lee 51CTO博客,原文链接:http://blog.51cto.com/ipneter/299231,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册