我一直在学习C#的基础知识,但没有得到一个很好的解释:
var l = new List<string>();
Run Code Online (Sandbox Code Playgroud)
我不知道<string>它在做什么,或者它List是否正在做魔术.我也看到过< >标签中抛出的对象.
有人可以用例子向我解释一下吗?
我指的是维基百科上Bill Pugh的Singleton Pattern解决方案:
public class Singleton
{
// Private constructor prevents instantiation from other classes
private Singleton() {}
/**
* SingletonHolder is loaded on the first execution of Singleton.getInstance()
* or the first access to SingletonHolder.INSTANCE, not before.
*/
private static class SingletonHolder
{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance()
{
return SingletonHolder.INSTANCE;
}
}
Run Code Online (Sandbox Code Playgroud)
他们在这里提到:
内部类之前没有引用(因此不会被类加载器加载),而不是
getInstance()被调用的时刻.因此,该解决方案是线程安全的,无需特殊的语言结构(即volatile或synchronized).
但是,2个线程是否有可能getInstance()同时调用,这会导致创建两个单例实例?synchronized在这里使用不安全吗?如果是,那么它应该在代码中使用的位置?
我正在开发.Net Compact Framework中的移动应用程序.我设法编辑注册表HKEY_CLASSES_ROOT,以便点击具有.xyz扩展名的文件将打开我的应用程序.基本上,我需要在单击该文件时对该文件进行一些操作.
但是,我意识到,如果我第一次这样做,它会到达program.cs static void Main.但是当程序运行时,我再次单击带有.xyz扩展名的文件时,它不会加载程序static void Main.我尝试在当前运行的表单中设置断点但仍然没有.
那它去哪了?如何检测文件.xyz被点击并做一些事情?
前几天我碰到了一些关于C#属性的问题.
假设我有这个设置:
public class Point
{
public float X;
public float Y;
}
public class Control
{
protected Point m_Position = new Point();
public Point Position
{
get { return m_Position; }
set
{
m_Position = value; }
// reorganize internal structure..
reorganize();
}
protected reorganize()
{
// do some stuff
}
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但在使用方面,我可以这样写:
Control myControl = new Control();
myControl.Position.X = 1.0f;
Run Code Online (Sandbox Code Playgroud)
问题是,我的Control班级不会认识到Position因为set()没有被调用而已经改变了.
有没有办法让人Control知道任何Position变化?
我正在从演讲幻灯片中做一些修改,它说构造函数以下列方式执行:
如果构造函数以此开头,则递归执行指示的构造函数,然后转到步骤4.
调用显式或隐式指示的超类构造函数(除非此类是java.lang.Object).
按照在此类中声明它们的顺序初始化对象的字段.
执行此构造函数的其余部分.
我不明白的是构造函数永远不会"启动"它,因为即使它没有形成类层次结构/关系,默认情况下插入super().
这与上面的描述有什么关系?
我打算在C#中创建一个多语言应用程序,并想知道处理以下内容的最佳方法是什么:
感谢您的任何建议,回复等.
我非常感谢链接和示例代码,如果它不是太麻烦(不是必需的,只有你有时间和可以).
我想构建一个接受字符串参数的方法,以及一个我想根据参数返回特定成员的对象.所以,最简单的方法是构建一个switch语句:
public GetMemberByName(MyObject myobj, string name)
{
switch(name){
case "PropOne": return myobj.prop1;
case "PropTwo": return myobj.prop2;
}
}
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但我最终可能会找到一个相当大的列表...所以我很好奇是否有一种方法,没有编写一堆嵌套的if-else结构,以索引方式实现这一点,以便匹配字段通过索引找到而不是通过开关掉落直到找到匹配.
我考虑使用a Dictionary<string, something>来快速访问匹配的字符串(作为关键成员),但由于我想访问传入对象的成员,我不确定如何实现.
我特意试图避免反射等,以便实现非常快速.我可能会使用代码生成,所以解决方案不需要小/紧等.
我最初正在构建一个字典,但每个对象都在初始化它.所以我开始将它移动到一个方法,可以根据键 - 一个switch语句查找值.但由于我不再编入索引,我担心调用此方法的连续查找会很慢.
SO:我正在寻找一种方法来结合索引/散列查找(如字典使用)的性能与返回传入对象的特定属性.我可能会将它放在用于它的每个类中的静态方法中.
我一直在使用我在类级别声明委托的方式:
protected delegate void FieldsDelegate();
//and then write a method e.g.
protected int CreateComponent(DbConnection cnctn, string tableName, Dictionary<string, object> changedFieldValues, FieldsDelegate fieldsDelegate)
Run Code Online (Sandbox Code Playgroud)
然而,这真的很麻烦,我无法立即看到代表是什么样的.所以我想这样做:
protected int CreateComponent(DbConnection cnctn, string tableName, Dictionary<string, object> changedFieldValues, delegate void fieldsDelegate())
Run Code Online (Sandbox Code Playgroud)
所以我没有单独的定义.
由于某种原因,不允许上述内容.那我该怎么办呢?
我试图对uint128_t由2 uint64_t秒组成的分区进行分区.奇怪的是,该函数适用于uint64_ts,只有较低的值集和较高的值= 0.我不明白为什么.
这是除法和位移的代码
class uint128_t{
private:
uint64_t UPPER, LOWER;
public:
// lots of stuff
uint128_t operator<<(int shift){
uint128_t out;
if (shift >= 128)
out = uint128_t(0, 0);
else if ((128 > shift) && (shift >= 64))
out = uint128_t(LOWER << (64 - shift), 0);
else if (shift < 64)
out = uint128_t((UPPER << shift) + (LOWER >> (64 - shift)), LOWER << shift);
return out;
}
uint128_t operator<<=(int shift){
*this = *this << shift; …Run Code Online (Sandbox Code Playgroud) 我有一个简单的C#.net Web应用程序.我正在使用XPS文件.我使用了以下代码
private void button1_Click(object sender, EventArgs e)
{
try
{
string xpsFile = "D:\\Completed-Form.xps";
xpsToBmp(xpsFile);
MessageBox.Show("Done");
}
catch (Exception ex)
{
MessageBox.Show (ex.Message);
}
}
static public void xpsToBmp(string xpsFile)
{
XpsDocument xps = new XpsDocument(xpsFile, System.IO.FileAccess.Read);
FixedDocumentSequence sequence = xps.GetFixedDocumentSequence();
for (int pageCount = 0; pageCount < sequence.DocumentPaginator.PageCount; ++pageCount)
{
DocumentPage page = sequence.DocumentPaginator.GetPage(pageCount);
RenderTargetBitmap toBitmap = new RenderTargetBitmap((int)page.Size.Width,(int)page.Size.Height,96,96,System.Windows.Media.PixelFormats.Default);
toBitmap.Render(page.Visual);
BitmapEncoder bmpEncoder = new BmpBitmapEncoder();
bmpEncoder.Frames.Add(BitmapFrame.Create(toBitmap));
FileStream fStream = new FileStream("D:\\xpstobmp" + pageCount + ".bmp", FileMode.Create, FileAccess.Write);
bmpEncoder.Save(fStream); …Run Code Online (Sandbox Code Playgroud) c# ×7
.net ×3
java ×2
biginteger ×1
bmp ×1
c++ ×1
class-design ×1
containers ×1
delegates ×1
dictionary ×1
jvm ×1
math ×1
multilingual ×1
properties ×1
singleton ×1
xps ×1