相关疑难解决方法(0)

如何在C#中为类名设置别名,而不必为每个使用该类的文件添加一行代码?

我想为类名创建一个别名.以下语法将是完美的:

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# class-design

71
推荐指数
7
解决办法
7万
查看次数

是否可以使用.net类型声明别名?

是否可以使用.net类型声明别名?在c#中,如果是这样的话?

c# alias

16
推荐指数
2
解决办法
5786
查看次数

C#公共类别别名?

我想要做的是在一个新的命名空间中用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#没有这样的东西.

.net c#

6
推荐指数
2
解决办法
3279
查看次数

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)

c# delphi types

4
推荐指数
1
解决办法
656
查看次数

C# 中的别名关键字(如 typedef)?

我有 2 个库,它们在不同平台上有不同的大小写 :(。似乎其他所有内容都相同(方法名称、参数顺序等)。如何创建别名,以便我当前对平台 a 的拼写在我编译时起作用对于平台 b (我真的不想为大小写差异做一个包装)

c#

3
推荐指数
1
解决办法
2154
查看次数

使用Environment.NewLine的别名

目前最好的做法是使用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更简洁的一个很好的方式,我从来没有做过一个重载的操作,所以不熟悉来龙去脉.

c#

3
推荐指数
1
解决办法
1562
查看次数

C#:全局别名是通用类名吗?

在某些项目中我们使用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>但我们经常使用相同的.是否可以全局声明使用,以便我们不必在每个文件中声明别名?

c# alias

3
推荐指数
2
解决办法
2429
查看次数

如何在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)
  • 在另一种情况下,类型应该允许多个值above(DialogResults)

我怎样才能拥有枚举类型的"集合"

注意:我认为在C#中不可能.如果这就是答案:可以这样说 - 问题得到了回答.

注意:仅仅因为我认为C#语言没有该功能并不意味着它没有该功能 - 我可能还没有找到它.


更新:另一个例子: …

c# enums set

3
推荐指数
1
解决办法
2930
查看次数

int32,int64的别名

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.

  1. 为什么我得到这个错误,虽然我使用int.
  2. 什么是别名Int32Int64
  3. 当使用Int32Int64,它依赖于操作系统?

c#

0
推荐指数
1
解决办法
2526
查看次数

标签 统计

c# ×9

alias ×2

.net ×1

class-design ×1

delphi ×1

enums ×1

set ×1

types ×1