我想为类名创建一个别名.以下语法将是完美的:
public class LongClassNameOrOneThatContainsVersionsOrDomainSpecificName
{
...
}
public class MyName = LongClassNameOrOneThatContainsVersionOrDomainSpecificName;
Run Code Online (Sandbox Code Playgroud)
但它不会编译.
注意此示例仅供参考.不要试图通过建议改变整个系统的设计来解决这个特殊问题.此示例的存在或缺乏不会改变原始问题.
一些现有代码依赖于静态类的存在:
public static class ColorScheme
{
...
}
Run Code Online (Sandbox Code Playgroud)
此配色方案是Outlook 2003配色方案.我想介绍一个Outlook 2007配色方案,同时保留Outlook 2003配色方案:
public static class Outlook2003ColorScheme
{
...
}
public static class Outlook2007ColorScheme
{
...
}
Run Code Online (Sandbox Code Playgroud)
但我仍然面临这样一个事实,即代码依赖于名为ColorScheme的静态类的存在.我的第一个想法是创建一个ColorScheme类,我将从Outlook2003或Outlook2007下载:
public static class ColorScheme : Outlook2007ColorScheme
{
}
Run Code Online (Sandbox Code Playgroud)
但你不能从静态类下降.
我的下一个想法是创建静态ColorScheme类,但使Outlook2003ColorScheme和Outlook2007ColorScheme类非静态.然后静态ColorScheme类中的静态变量可以指向"true"颜色方案:
public static class ColorScheme
{
private static CustomColorScheme = new Outlook2007ColorScheme();
...
}
private class CustomColorScheme
{
...
}
private class Outlook2008ColorScheme : CustomColorScheme
{
...
} …Run Code Online (Sandbox Code Playgroud) 我想要做的是在一个新的命名空间中用C#编写一些类,它们充当另一个命名空间中的类的包装类.有时候不需要包装类,但我仍然想在新的命名空间中使用相应的类.我想要一个完整的课程副本.有没有办法通过引用另一个类的定义在新命名空间中定义类?换句话说,我想要一个别名.
为了阐明我的意思,如果现有的命名空间名为"Namespace1",而新的命名空间命名为"Namespace2",则在Namespace2中使用如下代码:
using Class1 = Namespace1.Class1;
Run Code Online (Sandbox Code Playgroud)
不会起作用,因为Namespace2.Class1不存在.Class1只对Namespace2设置为"private",而对Namespace2设置为"public".如果我可以Namepsace2.Class1从命名空间外部使用,如果仍然可以参考Namespace1.Class1,那么这就是我想要的.
我想可能有一种方法可以通过属性或反射实现这一点.如果有一些预处理器指令或宏可以复制代码也可以工作,但显然C#没有这样的东西.
我试图将一些Delphi代码转换为c#,我遇到了一个问题......
在Delphi中,我已经推出了一种新类型
Type TData = Array of Extended
Run Code Online (Sandbox Code Playgroud)
在哪里我可以访问返回此类型的函数的结果与语句,如
Function TMyObject.ReadData:TData;
begin
...
end;
Data := MyObject.ReadData;
Result = Data[7] + Data[12]
Run Code Online (Sandbox Code Playgroud)
现在,如果我最初宣称这个,Array of Single那么我可以改变这一行来改变精度.(我可能不久要将其降低到以Double使任何结果与c#版本完全匹配.
所以问题是我可以在c#中做类似的事吗?就像是
class Data : Double[]
Run Code Online (Sandbox Code Playgroud)
虽然不完全像这样,因为它不编译,或者我会这样做
class DataEntry : Double
...
public DataEntry[] Read
{
...
}
Run Code Online (Sandbox Code Playgroud) 我有 2 个库,它们在不同平台上有不同的大小写 :(。似乎其他所有内容都相同(方法名称、参数顺序等)。如何创建别名,以便我当前对平台 a 的拼写在我编译时起作用对于平台 b (我真的不想为大小写差异做一个包装)
目前最好的做法是使用Environment.NewLine在你的代码,好了,开始一个新行.我希望能够在我的代码中使用别名或重载运算符,以便更简洁.而不是这个:
MessageBox.Show("My first line here" + Environment.NewLine + "My second line here");
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
MessageBox.Show("My first line here" + NL + "My second line here");
Run Code Online (Sandbox Code Playgroud)
如何轻松地将其设置为IDE设置或整个项目/命名空间?
别名或重载运算符是想到的,但不知道是否有做一个全球性的别名比Environment.NewLine更简洁的一个很好的方式,我从来没有做过一个重载的操作,所以不熟悉来龙去脉.
在某些项目中我们使用Generics,我们得到了很多这样的行:
Line<SomeTClass,SomeCClass> myLine =
(Line<SomeTClass,SomeCClass>)LineFactory.CreateLine(...)
Run Code Online (Sandbox Code Playgroud)
我们可以声明本地别名using X = Line<SomeTClass,SomeCClass>.
然后我们可以写,X myLine = (X)LineFactory.CreateLine(...).
我们有很多组合,<T,C>但我们经常使用相同的.是否可以全局声明使用,以便我们不必在每个文件中声明别名?
假设我有一个枚举:
namespace System.Windows.Forms
{
public enum DialogResult { None, OK, Cancel, Abort, Retry, Ignore, Yes, No }
}
Run Code Online (Sandbox Code Playgroud)
我想声明一个由这些枚举类型组成的"集合"
ShowForm(Form frm, DialogResults allowedResults)
Run Code Online (Sandbox Code Playgroud)
在其他语言中,您将声明:
public DialogResults = set of DialogResult;
Run Code Online (Sandbox Code Playgroud)
然后我可以使用
ShowForm(frm, DialogResult.OK | DialogResult.Retry);
Run Code Online (Sandbox Code Playgroud)
C#有Flags的概念,伪代码:
[Flags]
public enum DialogResults { DialogResult.None, DialogResult.OK, DialogResult.Cancel, DialogResult.Abort, DialogResult.Retry, DialogResult.Ignore, DialogResult.Yes, DialogResult.No }
Run Code Online (Sandbox Code Playgroud)
问题不是真正的代码 - Flags不指示编译器创建一组标志.
DialogResult)DialogResults)我怎样才能拥有枚举类型的"集合"?
注意:我认为在C#中不可能.如果这就是答案:可以这样说 - 问题得到了回答.
注意:仅仅因为我认为C#语言没有该功能并不意味着它没有该功能 - 我可能还没有找到它.
更新:另一个例子: …
class Program
{
static void Main(string[] args)
{
Int64 a = Int64.MaxValue;
Int64 b= Int64.MinValue;
try
{
checked
{
Int64 m = a * b;
}
}
catch (OverflowException ex)
{
Console.WriteLine("over flow exception");
Console.Read();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果变量声明为int,我得到编译错误,转换是从int到long的requreid.
Int32和Int64Int32和Int64,它依赖于操作系统?