在C#中,如何将对一个嵌套类的访问限制在其容器内?
我有一个配置类存储应用程序配置.目前,我正在使用静态课程.某些配置与一个主题有关,因此我想将它们组织成嵌套类,因此我可以参考这样的配置: AppConfig.Url AppConfig.LogSettings.FileSize 我有两个选项,要么使用静态嵌套类, public static class AppConfig { public static class LogSettings { public static int FileSize {get; set;} } } 或声明类,但添加静态属性: public static class AppConfig { public class LogSettings { public int FileSize {get; set;} } public static LogSettings logSettings { get;
4 2024-04-22
编程技术问答社区
在c#中记录对象的所有属性。如何记录对象的内部属性?
我正在尝试(1)记录对象的所有属性,以及(2)内部特定对象类型的所有属性.我可以做(1)但不能(2). 现在就是这种情况. foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(object1)) { string name = descriptor.Name; object value = descriptor.GetValue(object1); logger.Debug(String.Format("{0} = {1}", name, value)); } 我需要的是: foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(object1)) { string name = descriptor.Name; object value =
10 2024-04-22
编程技术问答社区
C#中的内部类
直到最近,我不知道普通类和内部类别/子类之间存在差异. 内部类的实例与包含类的实例之间的关系是什么?内部阶级的目的是什么,什么使它们与众不同? 解决方案 与Java不同,C# - 包含的类是嵌套的.包含类实例与包含类的实例之间没有关系.包含的类仅在C#中用于控制包含类的可访问性并避免污染名称空间. (某些公司的编码标准,每个类都必须进入自己的文件,其中包含类是小型类的方式.) 在Java中,内类的实例(对象)的指针返回了外部类.这是在Java完成的,因为它使用许多小课来处理事件等.C#为此提供了代表. (包含的课程是Java中每个人都喜欢但并未真正证明时间考验的实验理想之一.随着C#以后进行很多,它可以从Java中学到什么不正常的工作) ) 其他解决方案 .net没有像java那样的内部类.它确实有嵌套的类. 您使用它们的原因是控制类的可访问性. 其他解决方案 在C#中至少存在3个常规类和内部类之间的差异,这也可以在内部类别和包含它
16 2024-04-20
编程技术问答社区
内部通用类型与外部编译器警告相同
所以我有一个树类: public class Tree : IEnumerable where T : IComparable { private Node root = null; ... private class Node : IEnumerable where T : IComparable { private Node left, right; ... } } 它可以正常工作,但是我得到编译器警告:Type parameter 'T' has the same name as the type parameter from outer type 'Tree'好吧,当然是同一名称,它们应该是相同的类型. (实际上,由于Node类是私人的,因此永远无法在Tree类之外访问,因此它们是相同类型的保证.这是我的编译器警告,只是我可以安全地忽略吗? (我
26 2024-04-19
编程技术问答社区
如何限制从外层类中设置内层类的一个属性?
我有这样的代码的核心: public class OuterClass { public static InnerClass GetInnerClass() { return new InnerClass() { MyProperty = 1 }; } public class InnerClass { public int MyProperty { get; set; } } } 只有从InnerClass和OuterClass中设置的属性的解决方案是什么,而在这些范围中,MyProperty只需阅读 解决方案 没有保护水平. internal是您可以使用的最紧密的,它仅限于同一组件中的文件.如果您不能按照提议的构造函数参数,则可以使用一个接口: public class OuterClass { public static InnerClass GetInnerClass
8 2024-04-17
编程技术问答社区
为什么我们要使用内部类?
我想问你为什么我们需要内部课程以及为什么使用它们? 我知道如何使用内部类,但我不知道为什么.. 解决方案 某些内部类是公开暴露的(例如java中的Map.Entry),但这是迄今为止的例外. 内部类基本上是实现细节. 例如,Swing大量用于事件听众的内部类.没有它们,您最终将使用您不需要看到的一系列类污染全局名称空间(这可能会使他们的目的更难确定). 本质上是内部类是范围的一种形式.软件包访问从包装外部隐藏了类.私人内部类从该类外部隐藏该类. Java中的内部类也代替了缺乏功能指针或方法代表(在C#中)或闭合.它们是将功能传递给另一个函数的手段.例如,在Executor类中,您有: void execute(Runnable r); 因此,您可以通过以下方式通过: 来通过C/C ++. void execute(void (*run)()); 是函数的指针. 其他解决方案 wikipedia 可能会帮助您理解为什么我们需要一个
12 2024-04-13
编程技术问答社区
Java内部类在c#中的应用
我有以下Java代码: public class A { private int var_a = 666; public A() { B b = new B(); b.method123(); System.out.println(b.var_b); } public class B { private int var_b = 999; public void method123() { System.out.println(A.this.var_a); } } } 产生666和999.现在,我试图在C#中设置相似的代码,但是似乎不可能完成相同的代码.如果是这样,在C# 中编程时,通常如何达到类似的效果 解决方案 您需要使内部类作为构造函数参数的实例. (这就是Java编译器实现内部类的
20 2024-04-12
编程技术问答社区
在C#中是否有办法获得内类的列表?
根据标题.我想要给定类的所有内部类的列表,它可以是名称列表或类型列表 - 我没有大惊小怪.这可能吗?我认为可能有一种方法,但找不到. 解决方案 您想要 type.getNestedTypes .这将为您提供类型列表,然后您可以查询其名称. 其他解决方案 请注意,如果您想获得"双巢"类型,则需要重复 - foo.bar.baz是foo.bar中的嵌套类型,而不是foo. 对于"现代"环境(.net 4.5,pcls,uwa等),您需要 TypeInfo.DeclaredNestedTypes ,例如type.GetTypeInfo().DeclaredNestedTypes,使用 GetTypeInfo()扩展方法. 其他解决方案 如果您还需要私人和内部嵌套类型,则必须调用Type[] nestedTypes = typeof(MyType).GetNestedTypes(BindingFlags.Static | BindingFlags.Instance
6 2024-04-12
编程技术问答社区
在C#中使用内部类
关于C#中内类的使用和结构的最佳实践是什么. 例如,如果我有一个非常大的基类,并且两个大的内部类应该将它们分成单独的(部分类)代码文件,或将它们作为一个非常大的笨拙的代码文件? 拥有一个抽象类,也有一个公共继承的内部班级吗? 是不好的. 解决方案 通常我将内级保留为两个目的之一: 公共类,这些公共类是从其父类中得出的,其中父类是一个或多个抽象方法的抽象基础实现,每个子类都是一个为特定实现的实现. 阅读框架设计和指南后,我看到这被标记为"避免",但是我在类似于枚举的情况下使用它 - Althogh可能给人留下了不好的印象 内部类是私人的,是业务逻辑的单位,或者以其他方式紧密耦合到他们的父级,以此在任何其他类中消耗或使用的方式. 在所有其他情况下,我试图将它们保持在相同的名称空间和与消费者/逻辑父母相同的可访问性级别 - 通常的名称比"主要"类别较不友好. 在大型项目上,您会惊讶于您最初可能会发现自己构建一个强耦合组件的频率只是因为它是第一个或主要目
6 2024-04-11
编程技术问答社区
C#中的私有内部类--为什么不经常使用它们?
我对C#是相对较新的,每次我开始从事C#项目(我只从事C#中的几乎成熟项目),我想知道为什么没有内部类别? 也许我不明白他们的目标.对我来说,内部类 - 至少私人内部类别 - 看起来很像帕斯卡/模量-2/ada中的"内部过程":它们允许在较小的部分中分解一个主要类,以减轻理解. 示例:这是大多数时间看到的: public class ClassA { public MethodA() { myObjectClassB.DoSomething(); // ClassB is only used by ClassA } } public class ClassB { public DoSomething() { } } 由于ClassB仅通过Classa使用(至少持续一段时间),因此我的猜测是,该代码将更好地表示如下: public clas
12 2024-04-11
编程技术问答社区
从嵌套类中访问包围类中的字段的最佳方式是什么?
说如果我有一个列表的下拉列表,并且我在此类中有另一个嵌套的班级. 现在,访问嵌套班的下拉列表的最佳方法是什么? 解决方案 与Java不同,嵌套类不是一个特殊的"内部类",因此您需要传递参考.雷蒙德·陈(Raymond Chen)有一个示例,描述了这里的差异:这是一个示例,其中嵌套类的构造函数通过了外部类的实例,以供以后参考. // C# class OuterClass { string s; // ... class InnerClass { OuterClass o_; public InnerClass(OuterClass o) { o_ = o; } public string GetOuterString() { return o_.s; } } void SomeFunction() { InnerClass i = new InnerClass(th
22 2024-04-10
编程技术问答社区
为什么我需要使用C#的嵌套类?
我试图了解C#中的嵌套类.我了解一个嵌套类是在另一类中定义的类,我不明白的是为什么我需要这样做. 解决方案 我特别喜欢的模式是将嵌套类与工厂模式相结合: public abstract class BankAccount { private BankAccount() {} // prevent third-party subclassing. private sealed class SavingsAccount : BankAccount { ... } private sealed class ChequingAccount : BankAccount { ... } public static BankAccount MakeSavingAccount() { ... } public static BankAccount MakeChequingAccount() { ... } } 通过嵌套这样的类,我使第三方无法创建自己的子类.我可以完
20 2024-04-10
编程技术问答社区
应对JSON的嵌套C#类
下面是一个(稍微)剥离的响应,我成功地创建了新的"工作代码"条目后,我会从REST API中获得.我需要将响应当作某些课程,但我很难过. 供参考,我正在使用.NET 3.5中的JSON.NET(在SQL Server 2008 R2中以SSIS脚本运行)来尝试我的避难所化.这是JSON-我显然无法控制它,因为它来自别人的API: { "results":{ "jobcodes":{ "1":{ "_status_code":200, "_status_message":"Created", "id":444444444, "assigned_to_all":false, "billable":true, "active":true, "type":"regular",
22 2024-04-10
编程技术问答社区
如果一个BufferedReader在callable.call中没有被关闭,会发生什么?
我有三个问题. 解释说,我正在审查某人的代码,并注意到BufferedReader有时没有被关闭.通常,Eclipse警告说这是潜在的内存泄漏(我修复了).但是,在可呼叫的内部类中,没有警告. class outerClass { ... public void someMethod() { Future future = outputThreadPool.submit(new innerClass(this.myProcess.getInputStream(), threadName)); ... } class innerClass implements Callable { private final InputStream stream; private final String prepend; innerClass
8 2024-04-04
编程技术问答社区
从一个BroadcastReceiver类中调用一个活动方法
我知道我可以做一个内部接收器类,从我的接收器调用任何方法 但是我的主要活动太大了,做了很多事情. 因此,我将需要一个扩展广播接收器但不是内在类的课程.可以从我的主要活动中调用一种方法.我不知道这是否可能,但我的活动是家庭活动和"单一信息"活动,所以也许有了这个细节,有人可以访问我的活动. 如果不可能在多个文件中将某些Java代码拆分,则我的主体有600多行. (有关信息,我已经有19个Java文件,用于我的应用程序的Alpha版本,因此我已经尝试将其拆分) 解决方案 动态创建Broadcastreceiver: 在您的Broadcastreceiver类中定义类成员: YourMainActivity yourMain = null; 和方法: setMainActivityHandler(YourMainActivity main){ yourMain = main; } 从您的主动行为中: private YourBroad
16 2024-04-03
编程技术问答社区
作为内层类的BroadcastReceiver
我知道如果将BroadcastReceiver定义为Activity的内部类,则无法使用BroadcastReceiver.但是我想知道为什么?是因为系统必须实例化一个大的对象才能实例化接收器实例吗? 解决方案 ...因为系统必须实例化一个大活动对象才能插入接收器实例? 是,就像其他任何非静态内部类一样.它必须从某个地方(例如,实例化或其他某些机制)获得外部类的实例,然后才能创建(非静态)内类的实例. 从清单文件中的意图中调用的全局广播接收器,该系统将自动实例化,而该系统无需使用这种外部实例来创建广播接收器非静态内部类的实例.这与外部类是独立的,活动与否. 但是,如果您使用的是接收器作为参与活动的一部分,则可以在活动中手动对广播接收器进行实例化(活动回调之一,您有一个外部类实例可以使用: this),然后根据适当的登记/取消注册: public class MyActivity extends Activity { private Broad
4 2024-04-03
编程技术问答社区
AspectJ内部类别的连接点
我想知道有没有办法使用"//做某事"部分中的方面来达到代码? 预先感谢. turan. public class Test { private class InnerTest { public InnerTest() { JButton j = new JButton("button"); j.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //do something } }); } } } 解决方案 您可以在或中使用 withincode pointcuts匹配包含类,而 cflow pointcut匹配执行Add
22 2024-03-16
编程技术问答社区
如何从一个定义在另一个类中的类中制作一个数组
我是新手Java程序员,试图使用其他文件中定义的类.因此,我已经写了这两个.java文件: 首先,有mylibrary.java: package mymainprogram; public class MyLibrary { public class MyRecord { int number; char letter; } public static int TriplePlusThree(int input_number) { return ((input_number*3) + 3); } } 然后,mymainprogram.java: package mymainprogram; import java.util.Scanner; public class MyMainProgram { public static void main(
8 2024-03-07
编程技术问答社区
Java泛型。不能创建一个嵌套类的数组
我正在尝试将AVLTREE实现转换为堆样式数组,并且在仿制药方面遇到了一些问题: public class MyAVLTree, E> implements OrderedDictionary { class AVLNode implements Locator{ // ... } // .... public Locator [] toBSTArray() { AVLNode[] bArray = new AVLNode[size]; makeArray(root, 0, bArray); // recursion return bArray; } } 在行AVLNode[] bArray = new AVLNode[size];我会收到以下错误: "无法
2 2024-03-05
编程技术问答社区
带有接口的匿名类
在处理匿名内部类时,我对接口的概念感到困惑.据我所知,您无法实例化Java中的接口,因此以下语句将具有编译错误 ActionListener action = new ActionListener(); // compile error 当它处理匿名类时会发生什么?为什么允许使用new?例如: JButton button = new JButton("A"); button.addActionListener(new ActionListener(){ //this is fine @Override public void actionPerformed(ActionEvent e){ } }; 编译器是否只是在场景后面完成ActionListener?它如何工作? 解决方案 它允许您创建一个实现ActionListener的新的匿名类,因为
16 2024-02-26
编程技术问答社区