所以我内部有一个类和一个通用List,但它是私有的.
class Contacts
{
List<Contact> contacts;
...
}
Run Code Online (Sandbox Code Playgroud)
我想让这个课有效:
foreach(Contact in contacts) .... ;
Run Code Online (Sandbox Code Playgroud)
像这样(不工作):
Contacts c;
foreach(Contact in c) .... ;
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,Contact类实例c必须从联系人返回每个项目(c的私有成员)
我该怎么做?我知道它必须是IEnumerable与yield return,但在哪里声明?
我是C#的新手.到目前为止,我曾经创建过每个全局变量 - public static.我的所有方法都是public static,所以我可以从其他类中访问它们.
我在SO上看到,我拥有的公共静态方法越少越好.所以我通过将所有代码放在一个类中来重写我的应用程序 - 表单类.现在我的所有方法都是私有的,并且没有静态方法.
我的问题:我应该怎么做,在表格类中保留所有内容都是我认为的转储.
什么时候我应该使用public,私有和静态私有/公共?
我认为公共方法是一种"缺点",因为它们可以反编译,但我对此表示怀疑.我的公共方法也可以被反编译.私有方法中的"私有"是什么?
编辑:我不是问如何阻止我的程序被反编译,我问我是否应该使用静态,私有和公共.还有:将所有代码放在表单类中是否有问题所以我没有使用公共方法?
所以我在DLL和该类的子类中有一个抽象基类.我希望孩子们是公共的,但是要成为私人的基础,以便它不能在dll之外访问.
我怎么做?
我的TCP客户端在数据包中接收图像.图像使用zlib压缩.任务是解压缩图像并将其放在表单上.
我打算将压缩的图像保存在当前目录中,解压缩并在表单上加载解压缩的文件.
第一个问题是保存文件(压缩).zlib可以保存解压缩.
下面的代码加载压缩文件并在解压缩后保存.
private void decompressFile(string inFile, string outFile)
{
System.IO.FileStream outFileStream = new System.IO.FileStream(outFile, System.IO.FileMode.Create);
zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outFileStream);
System.IO.FileStream inFileStream = new System.IO.FileStream(inFile, System.IO.FileMode.Open);
try
{
CopyStream(inFileStream, outZStream);
}
finally
{
outZStream.Close();
outFileStream.Close();
inFileStream.Close();
}
}
public static void CopyStream(System.IO.Stream input, System.IO.Stream output)
{
byte[] buffer = new byte[2000];
int len;
while ((len = input.Read(buffer, 0, 2000)) > 0)
{
output.Write(buffer, 0, len);
}
output.Flush();
}
Run Code Online (Sandbox Code Playgroud)
如何将byte []数组直接传递给该函数?我打算将其保存为压缩文件,然后使用压缩文件的位置调用该函数,但我不知道如何从byte []数组中保存文件,也不知道传递byte []数组的方法作为输入文件.
任何帮助将受到高度赞赏.
谢谢.
我正在试图找出一种方法来检查字符串的第一个元素,如果它是一个数字或不是.
if not(myString[0] in [0..9]) then //Do something
Run Code Online (Sandbox Code Playgroud)
问题是我收到错误"元素0无法访问 - 使用'长度'或'SetLength"
另一种方式来自我的C-like exprieince - 将字符串的第一个元素转换为char并检查char,但编译错误没有区别.
if not(char(myString[0]) in [0..9]) then //Do something
Run Code Online (Sandbox Code Playgroud)
我该如何完成它?
我有以下代码:
using System
public static class IntEx
{
/// <summary>
/// Yields a power of the given number
/// </summary>
/// <param name="number">The base number</param>
/// <param name="powerOf">the power to be applied on te base number</param>
/// <returns>Powers applied to the base number</returns>
public static IEnumerable<int> ListPowersOf(this int number, int powerOf)
{
for (var i = number; ; i <<= powerOf)
{
yield return i;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在Powershell中加载了dll(Windows 8).我尝试以下方式使用它:
$test = 1.ListPowersOf(2)
Run Code Online (Sandbox Code Playgroud)
应该返回@(1,2,4,8,16 ...)
相反,它说没有这样的方法.
我尝试了以下方法:
[BaseDllNamespace]::ListPowersOf(1,2)
Run Code Online (Sandbox Code Playgroud)
依然没有.我在IntEx类中没有命名空间.
我如何使其工作
我用谷歌搜索"在图片框C#上绘图文字",但我找不到任何有用的东西.然后我用谷歌搜索"在C#上绘图文字",我发现了一些代码,但它并没有按照我希望的方式工作.
private void DrawText()
{
Graphics grf = this.CreateGraphics();
try
{
grf.Clear(Color.White);
using (Font myFont = new Font("Arial", 14))
{
grf.DrawString("Hello .NET Guide!", myFont, Brushes.Green, new PointF(2, 2));
}
}
finally
{
grf.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用该函数时,表单的背景颜色变为白色(默认情况下为黑色).
我的问题:
1:这会在图片盒上工作吗?
2:如何解决问题?
是否可以直接从Delphi中的资源使用字体以及如何使用?
我的第一步有问题.例如我不能在项目资源中包含Segoe UI Light字体,会发生异常.只有当文件的扩展名为'ttf'时才会出现异常.
如果上面写的不可能,那么如何在不单独部署字体(来自可执行文件)的情况下使用外部字体?
提前致谢!
c# ×7
delphi ×3
.net ×2
.net-3.5 ×1
attributes ×1
class ×1
combobox ×1
compression ×1
delphi-2009 ×1
delphi-2010 ×1
dll ×1
fonts ×1
graphics ×1
ienumerable ×1
image ×1
powershell ×1
resources ×1
rtti ×1
string ×1
vb.net ×1
winforms ×1
zlib ×1