在C#中把一组成员标记为私有/公有
在C ++类声明中,您可以将一组成员标记为私人或公共,例如 private: int x; double y; 似乎无法在C#中做到这一点.我错了吗? 解决方案 不,您不能在C#中做到这一点. 充其量,您可以使用私人的会员使用默认可见性,而不是私有的,但对于公众来说,您必须为所有成员指示. 其他解决方案 你正确.虽然,如果您将可见性关键字完全删除,则会员默认为私有. 其他解决方案 不,您没有错.如果您不编写任何修饰符,它将被假定为私人.
12 2024-04-22
编程技术问答社区
C#-命名空间内的类型声明
可能在命名空间内使用声明类型的方法,而不是在类中. for ex: namespace Test { public delegate void Ispossible(); } 这是有效的,并且没有生成任何汇编错误,但是我无法想到为什么我们会以这种方式声明它而不是班级. 解决方案 名称空间是.NET内的组织空间. 在类中声明类型通常会皱眉(但是,与所有事物一样,这不是100%的规则),因为它可以使类型更紧密地耦合并且更难找到. vb.net模块在某种程度上是一个例外( eding :它们实际上更像是编译器的技巧/句法 - 糖),但是通常,.NET生态系统中的所有内容都包含在命名空间中. 您的示例可以重复使用;如果它在班级中,则意味着该课程应仅使用代表,并且可能不必要地引入重复的代表. 更新:使用少数几个类型的名称空间似乎没有太多用处,但是如果没有它们,任何规模的项目将是组织灾难.想象一下.NET框架没有名称空间,一个(可能长时间过时)的框
16 2024-04-19
编程技术问答社区
为什么声明是必要的
我目前正在教一位同事.NET,他问我一个让我困惑的问题. 为什么我们必须声明? 如果VAR是隐式打字,为什么我们必须声明? Animal animal = new Animal(); 变成 var animal = new Animal(); 可以变成 animal = new Animal(); 隐式键入仍然意味着这是一个静态键入的变量. 如果将两种不同类型分配给变量,如果它们不共享基类(对象除外),则可能是编译器错误. 是否有技术原因无法做到,还是风格上我们喜欢havein 解决方案 当然,可能是可能的. 我可以想到一些您不想要的原因: 您变量的范围是什么?不清楚您是否不告诉编译器. animals在两种方法中是否会成为私人变量或两个方法范围范围的变量? 如果名称是错字怎么办?你永远不会知道. 如果您已经为此变量分配了一个值,然后尝试分配一个与最后一个不相容的新值(即JavaScript样式)(信用 Mar
8 2024-04-18
编程技术问答社区
帮助理解C#代码并将其移植到Objective-C上
好吧,我有其他人在C#中撰写的原型,我试图将其放入Objective-C中.现在,我尚未在C#上有任何正式经验,所以我还不了解这一切.我了解前三个变量是什么,但是我遇到了第四和第五行(C_DATA)所做的问题.是第四个宣布方法,然后将第五个定义它或正在发生的事情?感谢您的帮助! public class c_data { public double value; public int label; public int ID; public c_data() { } public c_data(double val) { value = val; } } 解决方案 第四行和第五行是C#中的构造函数.它们等同于Objective-C中的[C_DATA Alloc] Init]链. C#允许您根据所采用的参数超载构造函数.这等同于在Objective-C中使用两种不同的初始化方法: @interface CDa
8 2024-04-16
编程技术问答社区
如果私有变量已经是私有的,那么我应该把它们标记为私有变量,这是为了什么?
据我所知,在C#中,所有字段都是私有的,默认为默认值,即使不是其他标记. class Foo { private string bar; } class Foo { string bar; } 我猜这两个声明是相等的. 所以我的问题是:如果它们已经是私人的,我应该将私人变量标记为private? 解决方案 我已经在栅栏上了一段时间.我曾经主张将其隐式留下,但现在我认为我很明确地倾斜. 留下隐含的原因: 这意味着非私人会员(或比默认值得更多的访问权限)会有更大的差异;这突出了阅读代码时的区别 明确的原因: 有些开发人员可能不知道默认值:明确表示每个人都很清楚 它表明您已经积极做出了决定,而不仅仅是将默认 这些后点是其他解决方案 现在;无论如何,字段应该总是很私人,所以是否应该打扰这是一个边缘情况. 对于更广泛的主题,我记得埃里克·利普特(Eric Lippert)的评论 - 本质上说,给定方法/班级/ershing:
8 2024-04-16
编程技术问答社区
如果私有变量已经是私有的,那么我应该把它们标记为私有变量,这是为了什么?
据我所知,在C#中,所有字段都是私有的,默认为默认值,即使不是其他标记. class Foo { private string bar; } class Foo { string bar; } 我猜这两个声明是相等的. 所以我的问题是:如果它们已经是私人的,我应该将私人变量标记为private? 解决方案 我已经在栅栏上了一段时间.我曾经主张将其隐式留下,但现在我认为我很明确地倾斜. 留下隐含的原因: 这意味着非私人会员(或比默认值得更多的访问权限)会有更大的差异;这突出了阅读代码时的区别 明确的原因: 有些开发人员可能不知道默认值:明确表示每个人都很清楚 它表明您已经积极做出了决定,而不仅仅是将默认 这些后点是其他解决方案 现在;无论如何,字段应该总是很私人,所以是否应该打扰这是一个边缘情况. 对于更广泛的主题,我记得埃里克·利普特(Eric Lippert)的评论 - 本质上说,给定方法/班级/ershing:
12 2024-04-16
编程技术问答社区
使用XDocument获取UTF-8的大写字母
我需要在我用XDocument>的XML文档的顶部进行XML编码和版本. 我有这个,但它是小写的,并且需要在大写中. 我需要做什么? 我使用称为" doc"的XDocument类声明一个新的XML文档. 我使用doc.Save();将其保存到文件. 我尝试过: doc.Declaration.Encoding.ToUpper(); 宣布新的XDeclaration 将编码键入大写并将我的doc.Declaration设置为XDeclaration. 它仍然以小写为单位. 解决方案 您可以创建自定义XmlTextWriter,例如: public class CustomXmlTextWriter : XmlTextWriter { public CustomXmlTextWriter(string filename) : base(filename, Encoding.UTF8) { }
10 2024-04-15
编程技术问答社区
C++/CLI:相对于C#的优势
托管C ++/CLI比C#有任何主要优势.绝对不是我想的语法,因为C ++/CLI中的以下代码非常丑陋, C ++/CLI代码: [Out]List^% someVariable 与C#代码进行比较: out List someVariable 出于好奇,与上述相比,C ++/CLI中的语法更加丑陋. 解决方案 几乎完全是一种互操作语言 - 既允许.NET代码访问旧版C ++库,否则对于具有访问.NET库的扩展现有(本机)C ++代码库(以及这些主题的一些变化). 可能仅在C ++/CLI中编写完全刚刚起步的应用程序,甚至为您提供了纯C ++中无法使用的某些语言功能(例如垃圾收集),但我怀疑有很多语言功能真正会这样做的人.如果您已经离开了纯C ++,并且没有与.NET互动的目标,那么可能会有更多的自然选择(例如 d 或 scala ,例如 - 取决于您想要的方向进入). 同样,从纯C#转到C
10 2024-04-15
编程技术问答社区
为什么C#不允许你用var声明多个变量?
给定以下情况: // not a problem int i = 2, j = 3; 所以令我惊讶的是: // compiler error: Implicitly-typed local variables cannot have multiple declarators var i = 2, j = 3; 不编译.也许我对此不了解的东西(这就是为什么我要问这个)? 但是为什么编译器不会意识到我的意思: var i = 2; var j = 3; 会编译的. 解决方案 这只是程序员和编译器的另一个可能的混乱点. 例如,这很好: double i = 2, j = 3.4; 但是这是什么意思? var i = 2, j = 3.4; 使用句法糖,这种事情是令人头疼的事情,所以我怀疑您的情况会得到支持.它涉及太多的编译器,试图变得太聪明. 其他解决方案 当我们设计功能时,我问社区什么 var x = 1,
10 2024-04-14
编程技术问答社区
C#中变量声明和初始化的Regex
我想编写一条正则以从变量声明语句中删除所有变量值及其名称.说我有 int i,k = 10,l = 0 我想写一条正则是int \ s^,?|(^,?)* 但这也会接受 k = 10即 基本上是想法 如果字符串以int开头,则 获取由 分开的变量列表 我知道要提取CSV值,但是在这里我的字符串也有一些初始值.我该如何解决? 解决方案 开始思考定义的结构,例如, (a line can start with some spaces) followed by, (Type) followed by (at least one space) (variable_1) (optionally (comma // next var | '='number // initialization ) ...` 然后尝试转换每个组: ^ \s* \w+ \s+ \w+
12 2024-04-14
编程技术问答社区
如何在C#代码中知道一个变量是用哪种类型声明的
我想拥有一些函数,如果将类Base变量传递给了"基础",则"派生",如果将其声明为Derived等.等.不取决于值的运行时类型它被分配给. 解决方案 例如,请参见下面的代码.关键是使用 generics ,扩展方法仅用于尼斯语法. using System; static class Program { public static Type GetDeclaredType(this T obj) { return typeof(T); } // Demonstrate how GetDeclaredType works static void Main(string[] args) { ICollection iCollection = new List(); IEnumerable iEnumerable = new List();
10 2024-04-13
编程技术问答社区
缺少声明中的部分修饰语......存在这种类型的另一个部分声明"。我是一个初学者,只是按照书上说的做。
我是初学者,我正在做一本书.以下是我的代码,我得到了这个 "Missing partial modifier on declaration of type 'Windowsform.Form1'; another partial declaration of this type exists". 我该怎么办?我的代码如下: using System; using System.Windows.Forms; namespace Windowsform { public class Form1 : Form { private TextBox txtEnter; private Label lblDisplay; private Button btnOk; public Form1() { this.txtEnter = new TextBox();
18 2024-04-13
编程技术问答社区
字符串对字符串
在C#中有String对象和string对象. 两者有什么区别? 关于使用哪种的最佳实践是什么? 解决方案 没有区别.字符串(下情况)只是系统的别名. 其他解决方案 没有区别. System.String与string完全相同.常见的C#编码指南表明您应该使用关键字string. 其他解决方案 它们是别名,是可以互换的.但是,从样式上讲,对于声明,我使用较低的字符串,对于静态方法,我使用字符串. string foo = "bar"; if( foo != String.Empty ) { Console.WriteLine(String.Format("foo.Length = {0}", foo.Length)); }
12 2024-04-13
编程技术问答社区
在一行中把数组的值分配给不同的变量
我可以在数组中分配每个值以在C#中的一行中分离变量吗?这是Ruby代码中的一个示例: irb(main):001:0> str1, str2 = ["hey", "now"] => ["hey", "now"] irb(main):002:0> str1 => "hey" irb(main):003:0> str2 => "now" 我不确定我想要的是C#. 编辑:对于那些建议我只是将字符串"嘿"和"现在"分配给变量,这不是我想要的.想象以下内容: irb(main):004:0> val1, val2 = get_two_values() => ["hey", "now"] irb(main):005:0> val1 => "hey" irb(main):006:0> val2 => "now" 现在,方法get_two_values返回字符串"嘿"和"现在"是任意的.实际上,它可以返回任意两个值,甚至不必是字符串. 解决方案 在C#中不可能.
12 2024-04-12
编程技术问答社区
在C#中,什么是方法声明后的<T>?
我是VB.net的家伙. (因为我必须这样做,因为签名我的支票的人是这样说的.今天我遇到了一些我从未见过的语法,而且我似乎无法弄清楚. 在以下方法声明中,代表什么? 静态void foo (params t [] x) 我已经看到与声明的通用收藏和事物一起使用,但是我无法确定它对这种方法的作用. 如果很重要,我遇到了一些 c#c​​#brain teasers .第六次预告片包含整个代码段. 解决方案 这定义了 enericic方法,这是一种形式的一种形式被添加到C#2.0中的C#. 方法SIG应该是: static void Foo(params T[] x) { // ... 这使您可以将任何数量的任何(特定)类型的参数传递到该方法中,并且它作用于该参数数组.它类似于通用类型的工作原理,除了仅范围范围范围. 指定要传递到该方法的参数的类型,因此您可以将其称为: Foo(myClassInstance,
6 2024-04-12
编程技术问答社区
当数组声明里面有一个逗号时,是什么意思? 例如:float[,] 。
我在学习C#时试图理解一些代码.我不明白我什至需要搜索Google才能到达这里,但是代码如下: float[,] heightAll = terData.GetHeights(0, 0, allWidth, allHeight); 为什么数组声明在支架之间有逗号? 解决方案 这将是二维阵列.您还可以指定更多维度: 多维阵列(C#编程指南) 其他解决方案 每个逗号添加了一个额外的维度[,] = 2尺寸[,,] = 3维度... 其他解决方案 阵列是多维的 - 在您的情况下是二维.
8 2024-04-12
编程技术问答社区
C#成员变量初始化;最佳实践?
最好在声明上初始化类成员变量 private List _things = new List(); private int _arb = 99; 或默认构造函数? private List _things; private int _arb; public TheClass() { _things = new List(); _arb = 99; } 这仅仅是一种风格问题,还是有一种或另一种方式的性能权衡? 解决方案 在性能方面,没有真正的区别;字段初始化器被实现为构造函数逻辑.唯一的区别是字段初始化器发生在任何"基础"/"此"构造函数之前. 构造方法方法可以与自动实现的属性一起使用(字段初始化器不能) - 即. [DefaultValue("")] public string Foo {get;set;} public Bar() { // ctor Foo = ""; }
8 2024-04-10
编程技术问答社区
C隐式声明与内部函数声明不同
我在C标准功能方面遇到了一些麻烦.例如,我在memcpy函数中遇到了这个错误,甚至将正确的参数传递给了它. 我将标题包括为#include" header.h",并且我包括了,因此在" header.h"文件中. (我还通过strcpy,strtok和其他一些标准功能遇到了此错误,所有相应的标题包括" header.h") 有人可以帮我吗?我已经用尽了这项工作的时间... 预先感谢 解决方案 似乎在Eclipse中有些麻烦.我右键单击其中一个功能,所选源 - > add inclate,它解决了问题(但没有添加任何标头). 我希望这对别人有帮助 其他解决方案 由于您尚未发布代码,因此我认为您尚未在文件顶部包含以下代码行: #include 如果您使用C ++编译器(即G ++),则: #include
18 2024-04-10
编程技术问答社区
以下哪个函数的调用是有效的?
考虑声明 char first (int (*) (char, float)) ; int second(char, float); 以下哪个功能调用有效? a)first (*second); b)first (&second); c)first (second); d)以上都不是 任何人都可以向我解释这个代码吗? 解决方案 所有三个电话都是有效的. 根据C标准(6.3.2.1 lvalues,阵列和功能指示符) 4函数指定器是具有函数类型的表达式. 除非是运算符的操作数65)或unary&& 操作员,具有"函数返回类型"类型的功能指定器 被转换为具有"指针函数指针"的表达式 返回类型’ 您甚至可以写 first( ******second ); 是表达式中使用的函数指定器,将隐式转换为指针转换为函数本身,但实际上是一种情况,当它用作函数地址明确采用的&运算符的操作数. 这是一个指示的程序 #in
12 2024-04-10
编程技术问答社区